Передача setState дочернему компоненту с помощью перехватчиков React - PullRequest
1 голос
/ 22 января 2020

Мне любопытно, если передача setState в качестве опоры ребенку (немой компонент) нарушает любые "лучшие практики" или повлияет на оптимизацию.

Вот пример, где у меня есть родительский контейнер передача state и setState двум дочерним компонентам, где дочерние компоненты будут вызывать функцию setState.

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

export default function Dashboard() {

    const [state, setState] = useState({
        events: {},
        filters: [],
        allEvents: [],
        historical: false,
    });


    return (
        <Grid>
            <Row>
                <Col>
                    <EventsFilter
                        state={state}
                        setState={setState}
                    />
                    <EventsTable
                        state={state}
                        setState={setState}
                    />
                </Col>
            </Row>
        </Grid>
    )
}

Пример службы setState панели управления

function actions(setState) {
    const set = setState;
    return function () {
        return ({

            setEvents: (events) => set((prev) => ({
                ...prev,
                events,
            })),

            setAllEvents: (allEvents) => set((prev) => ({
                ...prev,
                allEvents,
            })),

            setFilters: (name, value) => set((prev) =>
                ({
                    ...prev,
                    filters
                })
            ),
        })
    }
}

Пока что я не заметил проблем с состоянием.

Ответы [ 3 ]

1 голос
/ 22 января 2020

Можно вызывать функцию от ребенка, чтобы установить состояние родителя, однако при этом нужно помнить несколько вещей

1) Я надеюсь, что вы на самом деле не вызываете функция как "setState", как правило, вы не хотите этого, с чисто синтаксической точки зрения

2) Поймите, что вы затрагиваете состояние родителя, а не ребенка, когда вызываете функцию изнутри ребенок. Это может привести к неожиданным результатам, если вы потеряете информацию о том, какими данными вы собираетесь манипулировать и откуда.

0 голосов
/ 22 января 2020

Вы можете использовать функцию, чтобы обернуть это setState. Передавать это ребенку не очень хорошая практика. Просто обновите его на компоненте.

<Child 
updatestate={(childInfo) => {
  setState(childInfo);
}}
/>
0 голосов
/ 22 января 2020

Хорошая практика заключается в создании функции-обработчика, которая делегирует функции setState, и передаче этой функции дочернему компоненту.

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