程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么所有东西都不能在 useEffect 中工作一次?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么所有东西都不能在 useEffect 中工作一次??

开发过程中遇到为什么所有东西都不能在 useEffect 中工作一次?的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么所有东西都不能在 useEffect 中工作一次?的解决方法建议,希望对你解决为什么所有东西都不能在 useEffect 中工作一次?有所启发或帮助;

我的 useSelector 钩子仅在 useEffect 内部在我运行它正在工作的其他地方时返回 null。例如:

// it's doesn't work.
const user = useSelector(selectUser);
useEffect(() => {
    console.log(user)
  },[]);
// it's work.
const user = useSelector(selectUser);
const exampleFunc = () => {
    console.log(user);
  }
  exampleFunc()

我正在使用谷歌身份验证。第一次登录时它返回null,但是当我刷新页面时,它返回的用户信息不为null。为什么从第一项返回null,刷新页面时用户信息就进来了?如果我输入 Console.log("Hello world") 钩子仍然不起作用,但是当我刷新页面时它起作用了。

// Redux
import { createSlice } from "@reduxJs/toolkit";

const initialState = {
  user: null,};

export const userSlice = createSlice({
  name: "user",initialState,reducers: {
    login: (state,action) => {
      state.user = action.payload;
    },logout: (state,action) => {
      state.user = null;
    },},});

export const { login,logout } = userSlice.actions;

export const selectUser = (state) => state.user.user;

export default userSlice.reducer;
// Original function
const user = useSelector(selectUser);

  useEffect(() => {
    const unsubscribe = auth.onAuthStateChanged((userAuth) => {
      if (userAuth) {
        dispatch(
          login({
            email: userAuth.email,uID: userAuth.uID,displayname: userAuth.displayname,photoUrl: userAuth.photoURL,})
        );
      } else if (!userAuth) {
        dispatch(logout());
      }
    });
    return unsubscribe;
  },[]);

更新:我解决了这个问题。我将 useEffect 函数更改为:

useEffect(() => {
    const userInfo = firebase.auth().currentUser;
    if (userInfo) {
      dispatch(
        login({
          email: userInfo?.email,uID: userInfo?.uID,displayname: userInfo?.displayname,photoUrl: userInfo?.photoURL,})
      );
    } else if (!userInfo) {
      dispatch(logout());
    }
  },[dispatch]);

解决方法

当你使用 useEffect 时,你传递一个依赖数组作为第二个参数

useEffect(() => {},[])
当您没有像上面那样向该数组传递任何项目时,useEffect 语句只会在第一次渲染时运行,而不会在之后运行。它基本上告诉 react 只执行一次 - 这与 componentDidMount

非常相似

useEffect(() => {},[dependency,secondDependency])
当您将依赖项传递给数组时,每次这些依赖项之一发生更改时都会运行 useEffect 语句。这就是您如何在状态更改上重建效果。

查看文档了解更多信息:https://reactjs.org/docs/hooks-effect.html

大佬总结

以上是大佬教程为你收集整理的为什么所有东西都不能在 useEffect 中工作一次?全部内容,希望文章能够帮你解决为什么所有东西都不能在 useEffect 中工作一次?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: