в моем дочернем компоненте я установил ввод с помощью onChange:

<input onChange={this.handlePlaylistTermChange} defaultValue={'New Playlist'}/>

который затем устанавливает состояние того, что пользователь ввел во ввод

handlePlaylistTermChange(e){
    this.setState({playlistName: e.target.value });

Затем, когда кнопка нажата, я передаю это значение методу, который использует реквизиты для вызова метода родительского класса, который принимает это состояние при нажатии кнопки

save() {
        if (this.state.playlistName === null || this.state.playlistName === "") {
            this.props.onSave('New Playlist') ;
        } else {
            this.props.onSave(this.state.playlistName);
        }
    }

Который вызывает в родительском классе:

savePlaylist(name) {
        let trackUrIs = [];

        console.log(name);
        let playlist =this.state.playlistTracks;

        playlist.forEach(track =>{
            trackUrIs.push(track.URI);

        });
        console.log( "passed in name"+ name);
        console.log(trackUrIs);

        Spotify.savePlaylist(trackUrIs,name);


        console.log('whats happening here?' + this.state.playlistName);
        this.setState({playlistTracks: []});
        this.setState({playlistName: ''});

Все это отлично работает, за исключением того, что мне нужно, чтобы значение имени списка воспроизведения изменилось на «новый список воспроизведения», но независимо от того, что я делаю, значение, которое произошло с onChange, остается. Я попытался сбросить состояние в дочернем элементе и передать его родительскому элементу, и, несмотря ни на что, я не могу получить значение onchange для сброса на «новый список воспроизведения» после нажатия кнопки сохранения.

1
Jesse James 25 Сен 2018 в 12:47

2 ответа

Лучший ответ

DefaultValue назначается входу только во время монтирования и не может быть обновлен с изменением, вам лучше использовать controlled input и устанавливать значение в зависимости от состояния и чтобы определить defaultValue, инициализируйте его в state

state={
   playList: 'New Playlist'
}

<input onChange={this.handlePlaylistTermChange} value={this.state.playList}/>

Теперь onChange поля ввода, вы можете обновить состояние playList, чтобы отразить обновленное значение во вводе

handlePlaylistTermChange =(e) => {
    this.setState({playList: e.target.value});
}
1
Shubham Khatri 25 Сен 2018 в 09:50
constructor(props) {
    super(props);

    this.state = { clickedItem: "show here..." };
    this.ItemClick = this.ItemClick .bind(this);        
}
ItemClick = (e) => {
    this.setState({ clickedItem: e.target.value});
}
0
SMM 19 Авг 2019 в 18:41