反应 - 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 的异步性质 您有一些选择:

  1. 使用setState的可选回调,它会在更新状态后调用。
    onSelectcountry(country) {
        this.setState(
          { Country: country},
          () => this.getNews({ this.state })
        );
    }
  1. 使用手动组合的参数调用 getNews
    onSelectcountry(country) {
        this.setState({ Country: country });
        this.getNews({
          ...this.state,
          Country: country
        })
    } 
  1. 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});
    }