我在我的应用中使用Picker组件。并且屏幕上有列表视图。根据选择器的选定值,列表视图会更新。这是代码
<tr v-for="obj in data">
<td v-for="(value, key) in obj" :id="obj"></td>
</tr>
我已经使用状态变量(<Picker style={{ flex: 0.3, marginTop: -10 }}
selectedValue={this.state.helpModel.needyType}
onValueChange={(itemValue, itemIndex) => {
this.setState((prevState) => {
return { helpModel: { needyType: itemValue, helpStatus: prevState.helpModel.helpStatus } }
});
this.getNeedies(this.state.helpModel);
}}>
{this.state.helpCategory.map((data, index) => {
return (
<Picker.Item key={data.id} label={data.title} value={data.value} />
);
})}
</Picker>
)来绑定选择器的this.state.helpModel.needyType
和selectedValue
我正在更新状态变量。然后根据onValueChange
调用一个方法,该方法将获取列表数据并更新列表视图。但是this.state.helpModel
没有立即获得更新,因此它会保留一段时间的先前值,但是在那个时间helpModel
方法被调用并且基于先前的值数据被请求。
可能是因为getNeedies
是异步行为。我使用setState
在2-3秒后调用getNeedies
方法解决了这个问题。但有没有更好或更优雅的方式来做同样的事情?可能setTimeout
喜欢.then
?
我刚刚开始使用React Native,所以如果这个问题太基础,请忽略。
答案 0 :(得分:6)
由于setState
以异步方式工作。这意味着在致电setState
后,this.state
不会立即更改。因此,如果要在设置状态后立即执行操作,请在setState
上使用第二个参数作为回调。考虑这个例子:
this.setState({
data: newData
}, () => {
//TODO: Do something with this.state here
});
答案 1 :(得分:1)
通过setState
方法更改状态不会立即更新应用的state
。将使用回调函数。
this.setState({value: event.target.value}, function () {
console.log(this.state.value);
});
如果您想关注,请参阅Link。