Управление состоянием списка элементов - React Native

У меня 2 компонента. Мы назовем их parent component и child component. Итак, в родительском компоненте я отображаю группу объектов следующим образом.

<ScrollView style = {[styles.container]}>

                    {userFriendsList.length > 0
                    && userFriendsList.map(reviewer => (

                        <Child reviewer = {reviewer} key = {reviewer.id}
                                        addToArray = {this.addToArray.bind(this)}
                                        removeFromArray = {this.removeFromArray.bind(this)}/>
                    ))}

</ScrollView>

Ниже приведен мой дочерний компонент

class Child extends Component {

    constructor() {

        super();

        this.state = {

            added: false

        }

    }

    //Send data to parent component
    handleSendingData(reviewer) {

        this.setState({
            added: !this.state.added
        }, () => {
            if (this.state.added === true) {
                this.props.addToArray(data)
            } else {

                this.props.removeFromArray(data.reviewerId)

            }
        });

        const data = {
            reviewerId: reviewer.id,
            reviewerName: reviewer.name,
            reviewerImage: reviewer.url
        };


    }


    render() {

        const {reviewer} = this.props;

        return (
            <TouchableOpacity style = {styles.addtogroupcard} onPress = {() => this.handleSendingData(reviewer)}>
                <Image source = {{uri: `${imageEnv}${reviewer.url}`}} style = {styles.friendimg}/>
                <Text style = {styles.friendname}>{reviewer.name}</Text>
                {this.state.added ? <Icon name = "ios-checkmark-outline" style = {styles.friendaddicon}/> :
                    <Icon name = "ios-add-circle-outline" style = {styles.friendaddicon}/>
                }

            </TouchableOpacity>
        );
    }

}

Как видите, я изменяю состояние своего дочернего компонента, чтобы отображать разные значки в соответствии с состоянием.

{this.state.added ? <Icon name = "ios-checkmark-outline" style = {styles.friendaddicon}/> :
                    <Icon name = "ios-add-circle-outline" style = {styles.friendaddicon}/>
}

Как я могу изменить это состояние в родительском компоненте? Правильно ли здесь использовать сокращение?

решена ли ваша проблема, если да, примите ответ, который ее решил!

aravind_reddy 18.06.2018 11:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
215
2

Ответы 2

Да, Redux поможет вам легко управлять всем состоянием вашего приложения, но вы также можете делать то, что вам нужно, используя также реакцию. Если вы хотите вызвать функцию, которая устанавливает состояние, которое находится в вашем дочернем компоненте, также из вашего родительского компонента. Это можно сделать с помощью ref's в react. Вот пример:

//Parent component
import React from 'react';
import Child from './child.js';

class Parent extends React.Component {
 render() {
    return (
    <div onClick = {this.child.func();}>
        <Child ref = {instance => { this.child = instance; }}/>
      </div>
    )
  }
}

export default Parent;

Дочерний компонент:

import React from 'react';

class Child extends React.Component {
    func = () => {
       console.info('child');
     // here you can set state;
    }
    render(){
        return(
            <div>
               child component
            </div>
        )
    }

}

export default Child;

как функция changePlayer связана с родительским компонентом?

CraZyDroiD 14.06.2018 06:33

В общем, лучший способ управлять состоянием в таких дочерних / родительских отношениях - это хранить состояние в родительском элементе. К каким бы объектам состояния детям ни требовался доступ, они должны передаваться в качестве опоры. Если дочернему элементу необходимо изменить состояние, передайте дочернему элементу функцию от родителя в качестве опоры.

Другие вопросы по теме