Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Reactjs 每次装入组件时,React hook useEffect都会导致初始渲染_Reactjs_React Redux_React Hooks - Fatal编程技术网

Reactjs 每次装入组件时,React hook useEffect都会导致初始渲染

Reactjs 每次装入组件时,React hook useEffect都会导致初始渲染,reactjs,react-redux,react-hooks,Reactjs,React Redux,React Hooks,我是个新手。所以,我想用React钩子实现componentWillReceiveProps。 我使用React.useffect()如下所示: 问题是,每次组件最初渲染时都会调用useEffect,我不希望这样。我只想在“props.authloginssuccess”更改时渲染它。将其包装在中,条件如下: React.useffect(()=>{ if(props.authloginssuccess){ console.log(props.authloginsaccess); } },[pr

我是个新手。所以,我想用React钩子实现componentWillReceiveProps。 我使用React.useffect()如下所示:


问题是,每次组件最初渲染时都会调用useEffect,我不希望这样。我只想在“props.authloginssuccess”更改时渲染它。

将其包装在
中,条件如下:

React.useffect(()=>{
if(props.authloginssuccess){
console.log(props.authloginsaccess);
}
},[props.authloginssuccess]);
请注意,尽管如此,效果仍然会运行-无论是最初还是每次
props.authloginsucess
更改时(这没关系!)


props.authloginsaccess
错误时,
if
块将阻止运行
console.log(props.authloginsaccess)
。因此,如果您不希望它最初运行,即在安装组件时运行,只需确保
props.authloginsaccess
最初为
false

您可以添加另一个状态来监视组件是否已安装

const [isMounted, setIsMounted] = React.useState(false);

React.useEffect(() => {
  if (isMounted) {
    console.log(props.authLoginSuccess);
  } else {
    setIsMounted(true);
  }
}, [props.authLoginSuccess]);

这样,它将仅在安装组件后执行。

由于您不希望效果在初始渲染时运行,因此可以使用
useRef

const [isMounted, setIsMounted] = React.useState(false);

React.useEffect(() => {
  if (isMounted) {
    console.log(props.authLoginSuccess);
  } else {
    setIsMounted(true);
  }
}, [props.authLoginSuccess]);
const initialRender = useRef(true);
React.useEffect(() => {
    if(initialRender.current) {
        initialRender.current = false;
    } else {
        console.log(props.authLoginSuccess);  // initially called every time, the component renders
    }
  }, [props.authLoginSuccess]);

什么样的数据结构是props.authloginssuccess?…另一个猜测:您的组件可能由其父组件(或与父组件一起)重新安装。您可以通过添加
useffect(()=>{console.log('mounted!');return()=>console.log('unmounted');},[]),
@go\u diego,props.authloginsucess是一个布尔值。这是一个解决方法,我也尝试过,对我的案例没有帮助。