【发布时间】:2021-03-02 03:42:40
【问题描述】:
我对 react/js 很陌生,所以我希望我在这里完全错误地使用 useEffect,但是如果有人给我指出正确的方向,那就太好了:)。
我正在尝试编写的代码是根据用户登录时选择的角色将元素设置为名为 HomeScreen 的 const。
function WorkflowTemplate({ Logout }) {
const user = useContext(userContext);
const [HomeScreen, setHomeScreen] = useState();
useEffect(() => {
console.log("starting useEffect role select");
switch (user.role) {
case "Chemistry":
return setHomeScreen(<WFChemistry />), console.log(HomeScreen);
case "Micro":
return setHomeScreen(<WFMicro />), console.log(HomeScreen);
case "Manager":
return setHomeScreen(<WFManager />);
case "Sample admin":
return setHomeScreen(<WFSampleAdmin />);
case "Developer":
return setHomeScreen(<WFDev />);
default:
console.log("error with role select");
}
});
上面的代码返回错误:元素类型无效:期望字符串(对于内置组件)或类/函数(对于复合组件),但得到:对象。
检查Router.Consumer的渲染方法。
但是,在尝试实现 useEffect 之前,我有
function WorkflowTemplate({ Logout }) {
const user = useContext(userContext);
const HomeScreen = () => {
console.log("running HomeScreen function");
switch (user.role) {
case "Chemistry":
return <WFChemistry />;
case "Micro":
return <WFMicro />;
case "Manager":
return <WFManager />;
case "Sample admin":
return <WFSampleAdmin />;
case "Developer":
return <WFDev />;
default:
return console.log("error with role switch");
}
}
这工作正常,预计每次渲染组件时都会调用它,这是不可取的。
我在使用 useEffect 函数时做错了什么?
提前谢谢你,
格雷格
【问题讨论】:
-
在第二种情况下 HomeScreen 是一个可调用函数。在第一种情况下,您已经调用了组件,它只是一个 JSX 元素。所以你需要将它渲染为 {HomeScreen} 而不是
标签: javascript reactjs