I've upgraded from RN 0.54 to 0.57 and my app has pretty much fallen over due to using React Native Elements.
I took use of their error functionality on TextInput
components which basically enabled props that you could style the error message and set your error message. Very convenient, however the upgrade has broke these and I'm now greeted with this error:
So I've delete that code and the error disappears, however I'm still receiving the issue when I run this code:
{ this.state.event.cards[i].fields[j].error &&
<Text style={{ color: '#e74c3c', fontSize: 14, paddingLeft: 5 }}>
{this.state.event.cards[i].fields[j].error}
</Text>
}
When I begin to type in to a text input, it sets my error message to an empty string, so if an error is returned typing in the field will make the error go away.
As soon as this.state.event.cards[i].fields[j].error
becomes a string, I get returned this error. However you can see I check to see if error exists, then I just display the error, or try to at least.
Another set of eyes would be grateful on this one.
I've shot myself in the foot too many times over this, so I'm leaving this here for the next person not to...
Whenever you see
99% of cases will be caused by using conditional rendering with only && instead of ternary ? : statements.
Change ALL OF YOUR LOGICAL CONDITIONAL RENDERS into ternary renditions.
ie:
DON'T DO
DO DO
Every Single Time. Please. For the love of react native.
This will throw the same error, because it returns undefined. We can render it like this -
For me the following code works fine, as long as
this.state.error === undefined
or it is not an empty string.If the error state is changed to empty string '', you will have the aforementioned exception:
Invariant Violation: Text strings must be rendered within a <Text> component
The reason of that is, when
this.state.error === ''
, the following expression will be evaluated as empty string, i.e., '', and this will causeInvariant Violation: Text strings must be rendered within a <Text> component
When
this.state.error === undefined
, the expression will be evaluated asundefined
, which is what we expect, and it's fine.try this :
I encountered the same error message in VSCode yet I didn't have /* Comments */ or any expressions. The solution was to remove the formatting in something like textedit or word and copy+paste the code back to vscode.
I do not know why or how it works (perhaps it specifically happens in VSCode), but the formatting issue is something I also have experienced with SDL in graphql...
text string must be rendered with in component