如何更新状态并对本机中的更新状态做出决定

时间:2018-02-03 12:11:10

标签: javascript react-native state

我在我的应用中使用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.needyTypeselectedValue我正在更新状态变量。然后根据onValueChange调用一个方法,该方法将获取列表数据并更新列表视图。但是this.state.helpModel没有立即获得更新,因此它会保留一段时间的先前值,但是在那个时间helpModel方法被调用并且基于先前的值数据被请求。

可能是因为getNeedies是异步行为。我使用setState在2-3秒后调用getNeedies方法解决了这个问题。但有没有更好或更优雅的方式来做同样的事情?可能setTimeout喜欢.then

我刚刚开始使用React Native,所以如果这个问题太基础,请忽略。

2 个答案:

答案 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