用的是 `React` 和 `Antd v5` 为什么在改了 `state` 之后元素还是没变化呢
const [editLock, setEditLock] = useState(false);
const MenuAction = () =>
setEditLock(true)} />
const menuDefault: MenuProps['items'] = [
{ label: , key: 'top' },
];
const formatMenu = (data: any) => data.map((item: any) => ({
key: item.id,
children: [],
label:
{!editLock && }
,
}))
问过 GPT 但是没有结果
"useState" 之类的**"hooks" 只能在自定义 "hook" 或者函数组件内使用**,不能在顶层作用域使用。不过神奇的是这样写居然能编译,我在
TS + React 环境下试了试,直接过不了 lint 检测。
并且 React 没有响应式属性的概念,因此无法在两个独立的组件之间共享 "state" ,要实现类似的功能,可以使用 "sustand"。
安装
npm install zustand
使用:
import { create } from "zustand";
const useStore = create((set) => ({
editLock: false,
setEditLock: (value) => set(() => ({ editLock:value })),
}));
const MenuAction = () => {
const { editLock, setEditLock } = useStore((state) => state);
return (
setEditLock(true)} />
)
}
const formatMenu = (data: any) => data.map((item: any) => ({
key: item.id,
children: [],
label: () => {
const { editLock } = useStore((state) => state);
return !editLock? : null
},
}))
«这里的 label 要作为组件传递和使用,而不是作为 "JSX.Element"。»