反应 - onselect 更改显示以前的值
react - onselect change display previous value
我是 React 的新手。
我有 select 或者哪个 returns 无论用户 selects.
代码示例:
handleChanged(e){
const { onSelectcountry } = this.props;
onSelectcountry(e.target.value)
}
return (
<div>
<Input type="select" name="select" value={Country} onChange={this.handleChanged.bind(this)}>
{
country.map((item) => {
return (<option value={item._id} key={item._id}> {item.name}</option>);
})
}
</Input>
</div>
);
i 调度操作取决于用户 select,
import { fetchNews} from '../../actions';
getNews(filterNews) {
const { fetchNews } = this.props;
fetchNews(filterNews);
}
onSelectcountry(country) {
this.setState({ Country: country});
this.getNews({
this.state,
})
}
<CountrySelector onSelectcountry={this.onSelectcountry.bind(this)} Country={Country}/>
问题是:selected值变化时,显示的是之前selection的值。
这是由于 setState
的异步性质
您有一些选择:
- 使用setState的可选回调,它会在更新状态后调用。
onSelectcountry(country) {
this.setState(
{ Country: country},
() => this.getNews({ this.state })
);
}
- 使用手动组合的参数调用
getNews
onSelectcountry(country) {
this.setState({ Country: country });
this.getNews({
...this.state,
Country: country
})
}
- 在
componentDidUpdate
回调中调用getNews
,例如让 onSelectcountry 保持简单,只关心国家状态更新,并以预期的方式处理实际状态更新。
componentDidUpdate(prevProps, prevState){
// coundition may vary depending on your requirements
if (this.state.Country !== prevState.Country) {
this.getNews(this.state);
}
}
onSelectcountry(country) {
this.setState({ Country: country});
}
我是 React 的新手。
我有 select 或者哪个 returns 无论用户 selects.
代码示例:
handleChanged(e){
const { onSelectcountry } = this.props;
onSelectcountry(e.target.value)
}
return (
<div>
<Input type="select" name="select" value={Country} onChange={this.handleChanged.bind(this)}>
{
country.map((item) => {
return (<option value={item._id} key={item._id}> {item.name}</option>);
})
}
</Input>
</div>
);
i 调度操作取决于用户 select,
import { fetchNews} from '../../actions';
getNews(filterNews) {
const { fetchNews } = this.props;
fetchNews(filterNews);
}
onSelectcountry(country) {
this.setState({ Country: country});
this.getNews({
this.state,
})
}
<CountrySelector onSelectcountry={this.onSelectcountry.bind(this)} Country={Country}/>
问题是:selected值变化时,显示的是之前selection的值。
这是由于 setState
的异步性质
您有一些选择:
- 使用setState的可选回调,它会在更新状态后调用。
onSelectcountry(country) {
this.setState(
{ Country: country},
() => this.getNews({ this.state })
);
}
- 使用手动组合的参数调用
getNews
onSelectcountry(country) {
this.setState({ Country: country });
this.getNews({
...this.state,
Country: country
})
}
- 在
componentDidUpdate
回调中调用getNews
,例如让 onSelectcountry 保持简单,只关心国家状态更新,并以预期的方式处理实际状态更新。
componentDidUpdate(prevProps, prevState){
// coundition may vary depending on your requirements
if (this.state.Country !== prevState.Country) {
this.getNews(this.state);
}
}
onSelectcountry(country) {
this.setState({ Country: country});
}