使用 React 钩子将 setState 传递给子组件

Nic*_*ter 5 javascript reactjs react-component react-state-management react-hooks

我很好奇setState作为道具传递给孩子(哑组件)是否违反了任何“最佳实践”或会影响优化。

下面是一个例子,我有父容器的传球statesetState两个子组件,其中,子组件会调用该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>
    )
}

Run Code Online (Sandbox Code Playgroud)

仪表板 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
                })
            ),
        })
    }
}

Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有注意到任何状态问题。

Pur*_*lia 3

一个好的做法是创建一个处理程序函数,该setState函数委托给该函数并将该函数传递给子组件。

  • 为什么这是一个好的做法?它有什么改善? (15认同)
  • 这是一个好主意的原因有两个: 1) 传递 setState 函数可以跨组件边界将子组件与父组件紧密耦合。它们不再是独立的单元,所以此时您应该问自己 - 它们到底应该是两个独立的组件吗?2) [更实用] - 它剥夺了事件发生时家长可以采取的行动的灵活性。例如,父级需要:“发生事件时,设置状态并显示警报”是合理的。如果接口是`onX`,你可以这样做。如果是`setState`,则不能。 (5认同)