Redux状态变量显示为未定义

Lakshay dutta

我正在使用React和redux制作应用程序。我正在努力实现“主页”检查auth的功能,如果auth为“ false”,它将重定向到“ auth-page”。这就是我试图实现上述功能的方式。

index.js

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { createStore } from "redux";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";

import "./css/index.css";
import AppScreen from "./screens/appscreen";
import NotFoundScreen from "./screens/notfoundscreen";
import AuthScreen from "./screens/authscreen";

import isLoggedInReducer from "./redux/reducers/isLoggedInReducer";

ReactDOM.render(
    <Provider store={createStore(isLoggedInReducer,window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() )}>
      <Router>
        <Switch>
          <Route path="/" exact>
            <AppScreen />
          </Route>
          <Route path="/auth">
            <AuthScreen />
          </Route>
          <Route path="*">
            <NotFoundScreen />
          </Route>
        </Switch>
      </Router>
    </Provider>,
  document.getElementById("root")
);

isLoggedIn减速器

const isLoggedInReducer = (isLoggedIn = true , action) => {
    switch(action.type){
        case 'LOG_IN':
            return true
        case 'LOG_OUT':
            return false
        default:
            return false
    }
}

export default isLoggedInReducer

主应用

import React from "react";
import { useSelector } from "react-redux";
import { Redirect } from "react-router";

import BottomBar from "../components/bottombar";
import Content from "../components/content";
import NavBar from "../components/navbar";

import "../css/screens/appscreen.css";

const AppScreen = () => {
  let isLoggedIn = useSelector((state) => {
    console.log(state)
    return state
  });
  // the value isLoggedIn is undefined here
  return isLoggedIn ? (
    <>
      <div className="appscreen">
        <NavBar />
        <Content />
        <BottomBar />
      </div>
    </>
  ) : (
    <>
      <Redirect to="/auth" push />
    </>
  );
};

export default AppScreen;

我试图使用useSelector钩子从存储中读取值。但是变量未定义。它没有显示在redux开发工具中,也不存在。我目前仅尝试从我想添加的变量中读取值,但目前不尝试更改该变量的值。

这是我第一次使用redux,将这么多样板代码包装起来已经有些混乱了。感谢您的宝贵时间!

阿姆加尔·阿卜杜勒·卡里姆

首先,问题出在isLoggedInReducer函数中,您应该了解Reducers,Reducers是将当前状态和操作作为参数并返回新状态结果的函数。换句话说,(状态,操作)=> newState。所以您应该定义一个initialState并将其传递给isLoggedInReducer函数,如下所示:

传递给reducer函数的state参数必须是应用程序的当前状态。在这种情况下,我们称其为initialState,因为它将是第一个(和当前)状态,并且在它之前没有任何东西。

const initialState = { isLoggedIn : true };
const isLoggedInReducer = (state = initialState , action) => {
switch(action.type){
    case 'LOG_IN':
        return {...state ,  isLoggedIn : true };
    case 'LOG_OUT':
        return { ...state , isLoggedIn : false };
    default:
        return state;
  }
}

export default isLoggedInReducer;

您可以检查此链接以获取有关Reducer的更多信息:https : //redux.js.org/tutorials/fundamentals/part-3-state-actions-reducers#writing-reducers

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Redux状态变量未定义

来自分类Dev

Redux状态变量在useEffect返回函数中未定义

来自分类Dev

尝试作为道具传递时,反应状态变量意外地未定义

来自分类Dev

React Native:使用状态变量的“ TypeError:未定义不是对象”

来自分类Dev

VueJS2和Vuex深层嵌套状态对象变异-声明状态变量未定义

来自分类Dev

尽管 Redux devtools 正确显示商店,但 Redux 状态返回为未定义

来自分类Dev

迭代状态变量

来自分类Dev

未知变量显示为未定义

来自分类Dev

Redux Toolkit:状态显示为Proxy /在reducer中未定义

来自分类Dev

Redux 状态未定义

来自分类Dev

静态变量-未定义参考

来自分类Dev

为JavaScript变量赋值后显示为未定义

来自分类Dev

如何使状态变量线程安全

来自分类Dev

cakephp,链接以获取状态变量

来自分类Dev

什么是joomla中的状态变量

来自分类Dev

保持对React状态变量的“引用”

来自分类Dev

状态变量和ForEach Swift

来自分类Dev

观察绑定或状态变量

来自分类Dev

状态变量未呈现

来自分类Dev

如何使状态变量线程安全

来自分类Dev

没有状态变量的动作

来自分类Dev

Redux-Toolkit createAsyncThunk Dispatch显示为未定义

来自分类Dev

ReactJS-当状态变量为数字时,SetState不会更新状态

来自分类Dev

ios应用单app模式状态变量和定义的变量都是nil

来自分类Dev

未定义变量未显示为Java Eclipse错误

来自分类Dev

在react redux和saga中调度完成后获取状态变量?

来自分类Dev

如何使用useSelector访问功能组件中的redux存储状态变量?

来自分类Dev

在 react-redux 中同步查询参数和状态变量

来自分类Dev

在mapStateToProps中未定义Redux状态

Related 相关文章

热门标签

归档