我想知道将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并不是错误的。如果子组件从prop中设置自己的状态,然后更新它(这是目前React的常规流程),那么该子组件就不再是愚蠢的了。这可能会使编码更快,但会降低可读性。 - ilkerkaran