Реагировать на собственный толчок с несколькими ключами и значениями - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть группа флажков, каждый раз, когда я выбираю флажок, мне нужно выдвинуть массив данных, например, { 'index':1, 'photo':'sample.png' }, и всякий раз, когда я снимаю флажок, мне нужно удалить его из состояния.после того, как мне нужно перебрать состояние, чтобы получить индекс и фотографию для использования

handleSelection = async (media, index, isSelected) => {
    alert(index);
    if (isSelected == true) {
        this.state.mediaSelected.push(media.photo);
    } else {
     this.state.mediaSelected.splice(this.state.mediaSelected.indexOf(media.photo), 1);
    }
     console.warn(this.state.mediaSelected);
  }

это работает для одного значения без ключа, есть ли способ нажать его с ключом и значением?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы всегда должны обновлять состояние с помощью this.setState, в вашем случае это будет примерно так:

handleSelection = async (media, index, isSelected) => {
alert(index);
if (isSelected == true) {
    this.setState({
        mediaSelected: this.state.mediaSelected.push({
            index, 
            photo: media.photo 
    }) 
});
} else {
    this.setState({
        mediaSelected: this.state.mediaSelected.splice(this.state.mediaSelected.indexOf(media.photo), 1)
    });
}
console.warn(this.state.mediaSelected);

}

0 голосов
/ 19 декабря 2018

Попробуйте: извините, я работаю и отвечаю на ваш вопрос, поэтому это занимает время.

handleSelection = async (media, index, isSelected) => {
    let selectPhotosObj = this.state.selectPhotosObj || [];
    if (isSelected == true) {
        const data = { index, photo: media.photo };
        //this.state.selectedPhotoObj will be the container for your object.
        selectPhotosObj.push(data)
        //need to set the new Array of Object to the state.
        this.setState({ mediaSelected: media.photo, selectPhotosObj });
    } else {
        const removedPhoto = this.state.mediaSelected.filter(value => value !== media.photo);
        selectPhotosObj = this.state.selectedPhotosObj.filter(value => value.index !== index);
        this.setState({
            mediaSelected: removedPhoto,
            selectPhotosObj

        })
    }
    console.warn(selectPhotosObj);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...