我在同一个应用程序中有"react router dom"one_answers"反冲"。
在路线内更新反冲状态的正确方法是什么?
const ItemRouter = ()=> {
const [selectedItemId, setSelectedItemId] = useRecoilState(itemIdSelected);
return (
<Route
key="items"
path="/item/:itemId/edit"
render={({ match }) => (
// TODO: i want to save itemId to recoil state;
// const itemId = match.params.itemsId;
// setSelectedItemId(itemId);
<ItemEditor whId={match.params.itemsId} />
)}
/>
)}
您可以简单地拥有一个依赖于useEffect
的组件来更新反映路由参数的Recoil原子。然后,其他原子/选择器可以读取该状态(如果ItemEditor
组件的所有状态都处于反冲状态,则它甚至不需要接受itemId
作为道具(
const itemIdSelectedState = atom({
key: 'itemIdSelectedState',
default: null,
});
const ItemRoute = ({ itemId }) => {
const setItemIdSelected = useSetRecoilState(itemIdSelectedState);
useEffect(() => setItemIdSelected(itemId), [itemId]);
return <ItemEditor whId={itemId} />;
};
const ItemRouter = () => (
<Route
key="items"
path="/item/:itemId/edit"
render={({ match }) => <ItemRoute itemId={match.params.itemId} />}
/>
);