Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';组件中的t更新状态是否有挂载钩子反应_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript Can';组件中的t更新状态是否有挂载钩子反应

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

无法更新组件内部的状态。组件没有挂载挂钩,即使尝试使用useLayoutEffect,仍然没有解决方案

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>
  );
}