Reactjs “反应钩”;“使用状态”;有条件地称为

Reactjs “反应钩”;“使用状态”;有条件地称为,reactjs,typescript,use-effect,use-state,Reactjs,Typescript,Use Effect,Use State,React抱怨下面的代码,说useState和useEffect是有条件调用的。没有typescript,代码工作正常: import React,{useState,useffect}来自“React”; 常量UseCollPosition=()=>{ 如果(窗口类型==“未定义”)返回500; //存储状态 常量[scrollPos,setScrollPos]=useState(window.pageYOffset); //滚动 const onScroll=()=>{ setScrollP

React抱怨下面的代码,说useState和useEffect是有条件调用的。没有typescript,代码工作正常:

import React,{useState,useffect}来自“React”;
常量UseCollPosition=()=>{
如果(窗口类型==“未定义”)返回500;
//存储状态
常量[scrollPos,setScrollPos]=useState(window.pageYOffset);
//滚动
const onScroll=()=>{
setScrollPos(窗口页面偏移);
};
//添加和删除窗口侦听器
useffect(()=>{
window.addEventListener(“滚动”,onScroll);
return()=>{
window.removeEventListener(“滚动”,onScroll);
};
});
};
导出默认位置;

您有一个提前返回,因此如果(typeof window==“undefined”)返回500,则有条件地调用它


你需要在提前返回之前移动挂钩。有关详细说明,请阅读此

将返回移动到函数底部,并将空数组传递给useEffect的第二个参数,以便在useEffect中只运行一次现有代码

import React, {useState, useEffect} from "react";

const useScrollPosition = () => {
    

    // Store the state
    const [scrollPos, setScrollPos] = useState(window.pageYOffset);

    // On Scroll
    const onScroll = () => {
        setScrollPos(window.pageYOffset);
    };

    // Add and remove the window listener
    useEffect(() => {
        window.addEventListener("scroll", onScroll);
        return () => {
            window.removeEventListener("scroll", onScroll);
        };
    }, []); // set an empty array for run once existing code in the useEffect

   return typeof window === "undefined" ? return 500 : <></>; // a value must be returned
    
};

export default useScrollPosition;
import React,{useState,useffect}来自“React”;
常量UseCollPosition=()=>{
//存储状态
常量[scrollPos,setScrollPos]=useState(window.pageYOffset);
//滚动
const onScroll=()=>{
setScrollPos(窗口页面偏移);
};
//添加和删除窗口侦听器
useffect(()=>{
window.addEventListener(“滚动”,onScroll);
return()=>{
window.removeEventListener(“滚动”,onScroll);
};
},[]);//为useEffect中的现有代码设置一个空数组
return typeof window==“undefined”?返回500:;//必须返回一个值
};
导出默认位置;