我觉得我在这里疯了.....
我在搜索栏中输入了“ x”,但this.setState({ filter: text });
未更新状态。...console.log(this.state.filter);
给我一个值”(其初始值在构造函数中设置)。
我可以看到text变量的值是x ...,但它只是不更新过滤器状态。
constructor(props) {
super(props);
this.state = {
timer: 30 * 60,
lat: 0,
lng: 0,
loading: false,
data: [],
pagetoken: null,
refreshing: false,
waiting4answer: false,
placeName: null,
placeUri: null,
filter: '',
};
}
renderHeader = () => {
if (this.state.waiting4answer === false) return null;
return (
<SearchBar
placeholder="Type Here..."
lightTheme
round
onChangeText={(text) => {
this.setState({ filter: text });
console.log(this.state.filter);
this.searchFilterFunction();
}}
autoCorrect={false}
/>
);
};
答案 0 :(得分:1)
状态正在更新,这只是您检查和使用更新后的状态存在缺陷的方式。
状态是异步的,需要花费一些时间来设置状态。您遇到的问题是您正在调用setState
,然后立即从状态记录值。不幸的是,当您执行此操作时,状态将不会更新,因此您将获得以前的值。
如果要使用刚刚设置的状态值,则需要使用callback
具有的setState
函数。 this.setState({key: value}, callback)
此回调允许您在设置状态后运行函数。您可以通过以下方式使用它:
this.setState({filter: text}, () => {
// put the things you wish to occur after you have set your state.
console.log(this.state.filter);
// I am guessing your searchFilterFunction requires the updated filter value in state
// so put that here too
this.searchFilterFunction();
});
这意味着,一旦您在状态中设置了filter
的值,并且该状态已更新以反映该值,它将运行callback
,因此它将记录{{1 }}处于当前状态,然后它将运行filter
。
您可以在Michael Chan的这一系列精彩文章中进一步了解状态
https://medium.learnreact.com/setstate-is-asynchronous-52ead919a3f0
https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296
https://medium.learnreact.com/setstate-takes-a-function-56eb940f84b6
答案 1 :(得分:0)
在设置状态后,立即使用setState回调获取更新后的状态
from django.db import connection
cursor = connection.cursor()
cursor.copy_expert('''
COPY employee_employee (name, slug, title)
FROM STDIN WITH (FORMAT csv, HEADER true, FORCE_NOT_NULL (status));
''', open(csv_fname),
)
rowcount = cursor.rowcount
反应setState为asynchronous