Javascript Can';组件中的t更新状态是否有挂载钩子反应
无法更新组件内部的状态。组件没有挂载挂钩,即使尝试使用useLayoutEffect,仍然没有解决方案Javascript Can';组件中的t更新状态是否有挂载钩子反应,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,无法更新组件内部的状态。组件没有挂载挂钩,即使尝试使用useLayoutEffect,仍然没有解决方案 function App() { const [curScreen, setScreen] = useState("large-desktop"); const getScreen = () => { let size = window.innerWidth; if (size < 600) return "mobile"; else if (siz
function App() {
const [curScreen, setScreen] = useState("large-desktop");
const getScreen = () => {
let size = window.innerWidth;
if (size < 600) return "mobile";
else if (size < 1200) return "tablet";
else if (size < 1800) return "desktop";
else return "large-desktop";
};
//useEffect
useEffect(() => {
setScreen(() => getScreen());
}, []);
return (
<div className="App">
...
</div>
);
}
函数应用程序(){
const[curScreen,setScreen]=使用状态(“大桌面”);
常量getScreen=()=>{
让大小=窗口宽度;
如果(尺寸<600)返回“移动”;
否则,如果(尺寸<1200)返回“平板电脑”;
否则,如果(尺寸<1800)返回“桌面”;
否则返回“大桌面”;
};
//使用效果
useffect(()=>{
设置屏幕(()=>getScreen());
}, []);
返回(
...
);
}
使用()=>getScreen()
您只将函数定义作为设置屏幕的值传递。相反,您需要调用函数。请尝试以下操作:
const [curScreen, setScreen] = useState("large-desktop");
useEffect(() => {
const getScreen = () => {
let size = window.innerWidth;
if (size < 600) return "mobile";
else if (size < 1200) return "tablet";
else if (size < 1800) return "desktop";
else return "large-desktop";
};
setScreen(getScreen());
}, []);
有关示例,请参阅完整代码:
function getScreen() {
let size = window.innerWidth;
if (size < 600) return "mobile";
else if (size < 1200) return "tablet";
else if (size < 1800) return "desktop";
else return "large-desktop";
}
function App() {
const [curScreen, setScreen] = useState(getScreen());
return (
<div className="App">
...
</div>
);
}
函数getScreen(){
让大小=窗口宽度;
如果(尺寸<600)返回“移动”;
否则,如果(尺寸<1200)返回“平板电脑”;
否则,如果(尺寸<1800)返回“桌面”;
否则返回“大桌面”;
}
函数App(){
const[curScreen,setScreen]=useState(getScreen());
返回(
...
);
}
我希望这有帮助 setScreen(getScreen())
应该可以工作,箭头在setState
中的用法在大多数情况下用于初始值。。。
function getScreen() {
let size = window.innerWidth;
if (size < 600) return "mobile";
else if (size < 1200) return "tablet";
else if (size < 1800) return "desktop";
else return "large-desktop";
}
function App() {
const [curScreen, setScreen] = useState(getScreen());
return (
<div className="App">
...
</div>
);
}