Считается ли нормальным (лучшей практикой) доступ к состоянию ребенка? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть родительский компонент, у которого много дочерних компонентов (дочерний компонент - это пустой div с цветным фоном).

Я хочу изменить цвет дочернего элемента, но хочу убедиться, что я его делаю другой цвет, чем он уже есть - например. если ребенок синий, я хочу изменить его на другой цвет, отличный от синего.

Для этого я использую опору, чтобы установить начальный цвет и сохранить эту опору в состоянии ребенка.

Когда я затем нажимаю на div, чтобы изменить цвет, я хочу получить доступ к текущему цвету div, чтобы я мог исключить его из выбора, чтобы, конечно, выбрать из

1) Это считается нормальным делать в реакции? 2) Если да - может кто-нибудь объяснить, как я могу получить доступ к состоянию ребенка? 3) Если это не лучший подход, как мне решить эту проблему?

class ColourBoxes extends Component {
constructor(props) {
    super(props)
    this.state = {

    }

    this.newColour = this.newColour.bind(this)
}

static defaultProps = {
    colours: ['#ff3860', '#498afb', '#fa8142', '#09c372', '#9166cc', '#ffdd57', '#ff4088']
}

newColour(oldColour) {

}

render() {
    return(
        <div>
            <Box colour={'#09c372'} ref="child"/>
        </div>
    )
}

}

   class Box extends Component {
    constructor(props) {
        super(props)
        this.state = {currColour: this.props.colour}
    }
    render() {
        return(
            <div className="Box" style={{backgroundColor: this.props.colour}}></div>
        )
    }
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Поскольку вы спросили, является ли это передовой практикой, ответ - НЕТ. Состояние предназначено для использования внутри самого компонента. Для обмена данными между компонентами следует использовать props. Вы можете использовать Redux или Context API для своих целей.

0 голосов
/ 05 мая 2020

Я не думаю, что ваш подход подходит для REACT: состояние компонента должно использоваться только для самого компонента, и, даже если возможно, к нему должны иметь доступ другие компоненты (я даже не уверен если у вас могут возникнуть проблемы с asyn c из-за этого).

В вашем случае вы должны поднять свое состояние , как рекомендуют официальные лица REACT c.

По сути, вы храните информацию о цвете <Box> внутри своего <ColorBoxes> компонента: каждый раз, когда состояние в <ColorBoxes> изменится, новые свойства будут поступать в ваш <Box> компонент, заставляя их менять цвет.

Более того, имея состояние в <ColorBoxes>, вы можете проверить, совпадает ли новый цвет с текущим.

Обратите внимание, что этот подход того стоит, если ваш обработчик кликов реализован в <ColorBoxes>; вместо этого, в случае, если он будет в <Box> .. Что ж, тогда вы должны просто использовать this.state.currColour, чтобы проверить, отличается ли новый цвет от текущего.

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