2016-06-04 1 views
0

입력이 변경되면 상태를 업데이트하기 위해 속성의 TextInput을 호출합니다. 여기입니다 : nativeEvent.text 뒤에 setState()가 있습니다.

onInputChanged(event) { 
    // Seems to be a delay before updating the nicknameString (1 typing late) 
    this.setState({ nicknameString: event.nativeEvent.text }); 
    console.log(this.state.nicknameString); 
    console.log(event.nativeEvent.text); 
} 

그러나 ... 첫 번째 로그 늦게 즉 하나 개의 입력으로 문자열을 표시 나는 Asdf를 입력 할 때, 첫 번째 로그가 표시 Asd은 두 번째는 Asdf가 표시됩니다 때. 그런 다음 f를 삭제하면 첫 번째 로그에 Asdf (늦게 입력)이 표시되고 두 번째 로그에는 Asd (표시되어야 함)이 표시됩니다.

설명이 있습니까?

답변

1

this.state. nicknameString 값을 기록하기 전에 등록 할 수 있습니다.

1 : setState가 완료된 후 콜백 상태를 로그 아웃 :

this.setState({ 
    nicknameString: text 
},() => { 
    console.log('nicknameString:', this.state.nicknameString) 
}) 

2

는 바로 여기, 몇 일을 몇 가지 예입니다 수 setState 후 상태를 검사하려면 : 이미 이벤트 대기열에있는 모든 I/O 이벤트 콜백 뒤에 함수를 대기열에 넣으려면 setImmediate를 호출하십시오.

this.setState({ 
    nicknameString: text 
}) 
setImmediate(() => console.log('nicknameString:', this.state.nicknameString)) 

두 예제 모두를 here으로 설정했습니다.

https://rnplay.org/apps/WRUcVw