Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法获得组件外部的redux状态

无法获得组件外部的redux状态
EN

Stack Overflow用户
提问于 2021-05-14 04:32:41
回答 1查看 80关注 0票数 0

我的auth用户的redux状态如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
auth:{
    user: {
            created_at: "2021-05-12T06:08:57.000000Z"
            email: "johndoe@gmail.com"
            id: 1
            name: "John Doe"
            permissions: ["product-view", "product-create", "product-update", "product-destroy", "category-view",]
            role: "superAdmin"
            role_id: 1
            updated_at: "2021-05-12T06:08:57.000000Z"
    }
}

我正在尝试检查用户是否有权限,或者没有使用这个权限数组。为此,我创建了一个实用程序文件authUser.js,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import _ from "lodash";

import { store } from "../store";

let adminRole = ["superAdmin", "admin"];
const state = store.getState();
const currentUser = state.auth.user;

export async function havePermission(permission) {
    console.log("currentUser >>", currentUser);
    console.log("permission >>", permission);
    if (isAdmin()) {
        return true;
    }
    if (_.includes(currentUser.permissions, permission)) {
        return true;
    }
}

export async function isAdmin() {
    if (adminRole.includes(currentUser.role)) {
        return true;
    }
}

export default {
    isAdmin,
    havePermission,
};

我把这个函数叫做

sidebar.jsx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import authUser from "../../../utils/authUser";

const Sidebar = () => {
    return(

        <div>
            {console.log(` have permission called >>
                ${authUser.havePermission("product-view")}
            `)}
            {authUser.havePermission("view-name") &&
                "Dummy Name"}
        </div>

    )
}

我是作为export { persistor, store };出口商店的

目前,这些数据显示在console.log上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
currentUser >> {}
permission >> product-view
have permission called >> [object Promise]                      
currentUser >> {}
permission >> view-name

找不到,为什么currentUser是空对象。如何解决此权限检查,因为它目前正在返回空对象,虽然我可以清楚地看到这个用户对象在redux选项卡上的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-14 04:47:46

在您的实用程序文件中,对getState()的调用将只在最初被调用,因此每当您试图访问currentUser时,您都将拥有默认状态,而不会使用自那以后应用的任何更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const state = store.getState();
const currentUser = state.auth.user;

您将希望将上述调用移动到一个选择器中,该选择器将获得当前状态,并计算当前用户是否具有该权限,即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export async function havePermission(state, permission) {
    console.log("currentUser >>", state.auth.user);
    console.log("permission >>", state.auth.user.permissions);
    if (isAdmin(state.auth.user)) {
        return true;
    }
    if (_.includes(state.auth.user.permissions, permission)) {
        return true;
    }
    return false;
}

您可以使用来自react-reduxreact-redux钩子,这将通过当前的redux状态,然后您可以将它传递给havePermission,以确定用户是否具有特定的权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useSelector } from "react-redux";
import {havePermission} from "../../../utils/authUser";

const Sidebar = () => {
    const hasProductPermission = useSelector((state) => havePermission(state, "product-view"));
    const hasViewNamePermission = useSelector((state) => havePermission(state, "view-name"));

    return(

        <div>
            {console.log(` have permission called >>
                ${hasProductPermission}
            `)}
            {hasViewNamePermission &&
                "Dummy Name"}
        </div>

    )
}

此外,还可以将useSelector调用移动到自定义权限钩子中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useSelector } from "react-redux";
import { havePermission } from "../../../utils/authUser";

const usePermission = (permission) => {
   return useSelector((state) => havePermission(state, permission);
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Sidebar = () => {
    const hasProductPermission = usePermission("product-view");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67534410

复制
相关文章
React引入Redux实现组件间共享状态
安装 npm install redux -s 在src目录下新建store文件夹,新增index.js文件 导入redux基本模块 import { createStore } from 'redux'; const store = createStore(); export default store; 再新增reducer.js文件,这里存放共享的变量 const defaultState = { countNum: 0 } export default (state = defaultSta
明知山
2021/06/21
8980
React第三方组件5(状态管理之Redux的使用⑥Redux DevTools)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.3K0
React第三方组件5(状态管理之Redux的使用⑥Redux DevTools)
React和Redux——状态管理Flux和Redux
在强调组件化的React中,我们需要以高内聚、低耦合的原则设计高可复用性的组件。因此渲染组件的数据由两部分组成,一个是由父组件传入的Props参数、一个是组件的内部状态State。Props参数可以是任何的Javascript对象,作为组件本身可以通过使用propTypes限制必须输入的参数和输入参数的类型以保证组件的可用性。State负责维护组件内部的状态,组件内部必要时可以通过触发父组件传递的回调函数传递信息给父组件或者将State以Props的形式传递给子组件。
lyndonxdlin
2018/07/05
1.9K0
React学习笔记(四)—— 组件通信与状态管理、Hooks、Redux、Mobe
2、利用Redux进行状态管理,这种方式的配套工具比较齐全,可以自定义各种中间件;
张果
2023/03/24
4.9K0
React学习笔记(四)—— 组件通信与状态管理、Hooks、Redux、Mobe
Redux框架reducer对状态的处理
前言 在react+redux项目里,关于reducer处理state的方式,在redux官方文档中有这样一段描述: 不要修改 state。 使用 Object.assign() 创建了一个副本。不能这样使用Object.assign(state, {visibilityFilter: action.filter }),因为它会改变第一个参数的值。你必须把第一个参数设置为空对象。你也可以开启对ES7提案对象展开运算符的支持,从而使用 { ...state, ...newState }达到相同的目的。 对此
张逸
2018/03/07
2.2K0
无法解析外部符号
本人在写qt工程的时候遇到无法解析外部符号 原因:只写了类声明,但还没有写实现类,造成调用时无法解析。 解决方法,把还没有实现类的声明给注释掉。
全栈程序员站长
2022/09/07
2.7K0
无法解析外部符号
Ubuntu“无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)
[scode type="yellow"]Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)[/scode]
乐心湖
2020/07/31
1.8K0
React + Redux 组件化方案
理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Header 组件,如下图所示
IMWeb前端团队
2019/12/04
5710
React + Redux 组件化方案
React + Redux 组件化方案 在介绍组件化方案之前,先对 react 和 redux 做一个简单介绍。 Why React 理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Head
IMWeb前端团队
2017/12/29
7810
React + Redux 组件化方案
React第三方组件5(状态管理之Redux的使用①简单使用)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.2K0
React第三方组件5(状态管理之Redux的使用①简单使用)
React + Redux 组件化方案
作者:何方舟 在介绍组件化方案之前,先对 react 和 redux 做一个简单介绍。 Why React 理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Header 组件,如下图所示
腾讯IVWEB团队
2017/05/03
1.4K0
React/ReactNative 状态管理: redux 如何使用
有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点。
张拭心 shixinzhang
2023/03/27
1.4K0
前端状态管理框架之Redux
随着应用程序单页面需求的越来越复杂,应用状态的管理也变得越来越混乱。应用的状态不仅包括从服务器获取的数据,还包括本地创建的数据,以及反应本地UI状态的数据,而Redux正是为解决这一复杂问题而存在的。
xiangzhihong
2022/11/30
1.1K0
React第三方组件5(状态管理之Redux的使用④TodoList下)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.1K0
React第三方组件5(状态管理之Redux的使用④TodoList下)
React第三方组件5(状态管理之Redux的使用③TodoList中)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.9K0
React第三方组件5(状态管理之Redux的使用③TodoList中)
Ceph组件的状态
client 无法链接mon的可能原因 1.连通性和防火墙规则。在MON主机上修改允许TCP 端口6789的访问。 2.磁盘空间。每个MON主机上必须有超过5%的空闲磁盘空间使MON和levelDB数据库正常工作。 3.MON没有工作或者离开选举,检查如上命令输出结果中的quorum_status和mon_status或者ceph -s 的输出来确定失败的MON进程,尝试重启或者部署一个新的来替代它。
院长技术
2020/06/11
1.3K0
React第三方组件5(状态管理之Redux的使用⑤异步操作)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.5K0
React第三方组件5(状态管理之Redux的使用⑤异步操作)
React第三方组件5(状态管理之Redux的使用②TodoList上)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.2K0
React第三方组件5(状态管理之Redux的使用②TodoList上)
无法解析的外部符号 “__declspec(dllimport)
用户3519280
2023/07/08
9940
无法解析的外部符号问题小结
问题1:在编写通信相关程序中,引用了一个静态库(该静态库编译没有问题,并被其他项目引用),该库是对SOCKET的一个封装。基本结构如下:
全栈程序员站长
2022/09/13
3K0
无法解析的外部符号问题小结

相似问题

组件无法赶上redux状态

10

使用react redux访问组件外部的状态

24

无法从组件获取redux状态

148

无法从组件获取redux状态

128

如何订阅Redux中的状态外部React组件?

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文