-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[TextInput] Error setting property 'text' of RCTTextField with tag #144: Native TextInput(Hdsgdh) is 4 events ahead of JS - try to make your JS faster. #4845
Comments
Hey rclai, thanks for reporting this issue! React Native, as you've probably heard, is getting really popular and truth is we're getting a bit overwhelmed by the activity surrounding it. There are just too many issues for us to manage properly.
|
|
I believe it's due to creating a function for every re-render of TextInput. I know this is "old" in RN time, but try putting that function outside of the render function |
I'll have to give that a try, thanks. |
@tomauty you were right, putting the function outside made it perform faster and I didn't get the error when I typed really fast. |
My function outside, but I still meet this warn.
|
My function is outside too, but I still meet the warnings. When I test it on the device, is really slow when I try to move to the next TextInput. Any solution yet? |
+1 — I'm also looking for a solution to this. |
+1 - and me too |
+1 |
1 similar comment
+1 |
@brentvatne is this a legitimate issue that deserves a Product Pains post because of all these accumulating +1s or is it just a matter of keeping your components light-weight so that re-renders don't cause this? |
@tomauty thanks for the tip. That helped but didn't totally fix it. Anyone else have a good work around? The solutions I can think of are to pass the text value in the onBlur prop or add another prop that is like onChangeText but with some sort of delay so that it doesn't fire until the user takes a break from typing (or deleting). |
I think this needs to be reopend. |
+1 I agree |
+1 |
3 similar comments
+1 |
+1 |
+1 |
For anyone looking for a workaround who doesn't need to constantly read the state of the text and only needs it on submission, I think I have one. I'm not sure this is reliable yet but it seems to work and definitely gets rid of the warning and the slowness. The workaround is to remove the For more details on what I did.. Here's what my original render() {
var { onSubmitEditing, onChangeText } = this.props;
// ... edited for brevity
return (
<View style={containerStyles}>
<View style={styles.inputContainer}>
<TextInput
ref="input"
onSubmitEditing={onSubmitEditing}
onChangeText={onChangeText}
/>
</View>
</View>
)
} As suggested above, I was reading from the props directly above and it didn't work (not having an inline callback rendered every time). I also tried passing class SearchInputContainer extends Component {
constructor(props) {
super(props);
this.searchValue = '';
}
onSubmitEditing() {
this._submit();
this._startEditing();
}
_submit() {
var { getSearchResults, searchResultsAreVisible } = this.props;
var query = this.searchValue;
if(!searchResultsAreVisible) {
this._showSearchResults();
}
getSearchResults(query)
}
onChangeText(text) {
this.searchValue = text;
}
render() {
return (
<SearchInput
{...this.props}
onSubmitEditing={this.onSubmitEditing.bind(this)}
onChangeText={this.onChangeText.bind(this)}
/>
)
}
} Note the So, I removed the
Note the My updated container:
Note how I'm passing in the |
I only experience this issue when I have |
Here's a repo to demonstrate the issue:Bare bones ReactNative 0.33, redux, & react-redux example on a simple login form (only 1 component) |
Im also seeing this issue, ONLY when live reload and debug remotely are both on. Im currently using RN version 0.37.0 (+ redux / react-redux) |
+1 |
+1 Update: Can confirm what others have said. If I stop Debugging JS Remotely, the simulator speeds up dramatically and I no longer get the error. If I restart Debugging JS remotely, and the simulator slows again, I can fix it by closing then restarting the simulator itself. |
I fixed the problem by doing:
I don't know what causes the problem, but in my case it appears when my mac resumes from sleep, with the simulator running. |
the last few comments seems to associate with the performance of our simulator or mobile,I think it is the reason too. |
The problem is still there after all this time. Also what helped is close remote debugging |
I don't think trying to make your views faster, stopping debugging, etc. are real answers. I am working on an app that uses external barcode scanners and the scanner inputs text extremely fast, of which, I doubt any amount of optimization would help fix my issue. I even have this issue in release mode with barcode scanners. Why can it not just update in a delayed manner instead of just ignoring the input? |
@brentvatne I am still having this issue (so are many others in this thread) Is there a solution to this similar to what @JasonHenson suggested? |
cc @sahrens who worked on this initially |
It's definitely the
@JasonHenson You might want to look into debounce and throttle. It's saved me a few times before. @crobinson42 Thanks a million for that one. |
Hi all. I had the same problem, but I founded solution that works for me. The error is because we have a lot of setState in queue. So my solution is:
I define Timeout with 100 milliseconds delay (or you can pick any else, try to experiment with it), and on Each next call of "onChangeText" function I clear this timeout and define it again. So if you will type very quick, only your timeout will update, and after 100 milliseconds from your last type setState will update. |
Hi there! This issue is being closed because it has been inactive for a while. Maybe the issue has been fixed in a recent release, or perhaps it is not affecting a lot of people. Either way, we're automatically closing issues after a period of inactivity. Please do not take it personally! If you think this issue should definitely remain open, please let us know. The following information is helpful when it comes to determining if the issue should be re-opened:
If you would like to work on a patch to fix the issue, contributions are very welcome! Read through the contribution guide, and feel free to hop into #react-native if you need help planning your contribution. |
same issues |
I still continue to face this issue. I have a need to enable or disable a button based on if text input being empty or not. |
My requirement was to disable the button only when the text was empty. I put an if condition to call setState only of this condition turned true and it solved my problem. |
+1 |
1 similar comment
+1 |
my solution is : use
you can use because , calling NOTE:
3: init value: not solved any good idea ? please tell me ! thank you ! |
I was also having that issue. But when I tried that on device instead of simulator it worked fine. No lag as shown in simulator. If you use debounce on the onChange function the lags that are coming up will be resolved. Take a cue from this article debounce example |
I have this issue even on real device! |
This error happens when you type extremely fast. The more components you have alongside it, the more likely that this will happen.
And if you hit submit IMMEDIATELY after typing, the value won't be set and the input may just be blank.
In order for the value to actually be there, you have to wait just a little bit, then you can hit enter and the value will stay.
This is on iOS.
The text was updated successfully, but these errors were encountered: