Saya cukup baru di React.

Saya memiliki pemilih yang mengembalikan apa pun yang dipilih pengguna.

Contoh Kode:

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>
);

Saya mengirim tindakan tergantung pada pilihan pengguna,

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}/> 

Masalahnya adalah: Ketika nilai yang dipilih berubah, itu menunjukkan nilai dari pilihan sebelumnya.

0
allord 11 April 2020, 13:04

1 menjawab

Jawaban Terbaik

Ini karena sifat asinkron dari setState Anda memiliki beberapa opsi:

  1. gunakan panggilan balik opsional setState, itu akan dipanggil setelah memperbarui status.
    onSelectcountry(country) {
        this.setState(
          { Country: country},
          () => this.getNews({ this.state })
        );
    }
  1. Panggil getNews dengan argumen yang disusun secara manual
    onSelectcountry(country) {
        this.setState({ Country: country });
        this.getNews({
          ...this.state,
          Country: country
        })
    } 
  1. Hubungi getNews di componentDidUpdate panggilan balik, mis. biarkan onSelectcountry sederhana dan hanya peduli tentang pembaruan status Negara, dan tangani pembaruan status nyata dengan cara yang diharapkan.

    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});
    }
1
Kyr 11 April 2020, 10:45