【发布时间】:2020-05-08 02:08:37
【问题描述】:
我很好奇将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
})
),
})
}
}
到目前为止,我还没有注意到任何状态问题。
【问题讨论】:
-
我觉得从孩子的角度把
setState叫做道具也没有错。如果孩子从 prop 设置自己的状态然后更新它(这是迄今为止通常的 React 流程),那么那个孩子就不再愚蠢了。它可能会使编码更快,但会降低可读性。
标签: javascript reactjs react-hooks react-component react-state-management