首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法将"connected“HOC与react路由器一起使用

无法将"connected“HOC与react路由器一起使用
EN

Stack Overflow用户
提问于 2020-04-25 03:26:45
回答 1查看 69关注 0票数 0

我正在做一个HOC,我可以用它来确保登录的用户不会访问某些路由(我称之为“访客路由”)。它将连接到我的redux存储,以访问用户的loggedIn状态。以下是我对HOC的实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react';
import { connect } from 'react-redux';

export function guestRoute(ComposedComponent) {
  class GuestRoute extends Component {
    componentWillMount() {
      if (this.props.loggedIn) {
        this.props.router.push('/')
      }
    }

    componentWillUpdate() {
      if (this.props.loggedIn) {
        this.props.router.push('/')
      }
    }

    render() {
      return (
        <ComposedComponent {...this.props} />
      );
    }
  }

  const mapStateToProps = (state) => {
    const { loggedIn } = state.auth;
    return { loggedIn };
  };

  return connect(mapStateToProps)(GuestRoute);
}

如您所见,我将返回一个“已连接”的包装器组件。

以下是我的路由以及如何使用此HOC:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react';
import { Route } from 'react-router';
import { guestRoute } from './routes/guestRoute';
import Main from './layout/Main';
import Signup from './auth/Signup';

const routes = (
  <Route component={Main}>
    <Route path="/signup" component={guestRoute(Signup)} />
  </Route>
);

export default routes;

这给了我两个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Warning: Failed prop type: Invalid prop `component` supplied to `Route`.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: symbol.

如何返回可以在路由中使用的有效组件,而不是connect返回的组件

编辑:我正在使用react v16.13.1和react-router v3.2.1

下面是一个再现错误的沙箱:https://codesandbox.io/s/zealous-austin-vy2et?file=/src/store.js

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-26 04:00:07

我让你的codesandbox正常工作了,我做的主要事情是把react-router更新到react-router-dom的最新版本。我不确定您为什么要使用一个新项目和一个古老的路由器库。

我做的其他事情是让代码运行,我是否让应用程序声明成为一个实际的组件,而不是导致问题的静态JSX

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const App = () => (
  <React.StrictMode>
    <Provider store={store}>
      <Router>{routes}</Router>
    </Provider>
  </React.StrictMode>
);

ReactDOM.render(<App />, document.getElementById("root"));

我还让你的路由在声明上有一点不同,因为路由不同时支持孩子和组件。由于在Main中不需要Route值,因此可以将其更改为路由的子级。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const routes = (
  <>
    <Route path="/">
      <Main>
        <Route path="/signup" component={Signup} />
      </Main>
    </Route>
  </>
);

在访客路由中,我将componentWillMountcomponentWillUpdate更改为componentDidMountcomponentDidUpdate,因为它们是首选选项,因为其他选项现在已被弃用。

在注册时,我把它和周围的guestRoute HOC一起导出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default guestRoute(
  connect(
    null,
    mapDispatchToProps
  )(Signup)
);

https://codesandbox.io/s/inspiring-field-yokx4?file=/src/layout/Main.jsx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61420600

复制
相关文章
编写SQL查询的最佳方法
毫无疑问,编写代码更像是一门艺术,而不是一门科学。即使有经验,每个编码人员也无法编写既可读又可维护的优美代码。一般来说,当您学习编码艺术时,编码会随着经验而提高。例如,组合重于继承或编码接口大于实现,但只有少数开发人员能够掌握这些技术。
liuxuewen
2018/10/17
1.7K0
SQL 教程:如何编写更佳的查询
结构化查询语言(SQL)是数据科学行业中一项不可或缺的技能,一般来说,学习这个技能是挺容易的。不过,很多人都忘记了写查询只是SQL的第一步。我们还得确保查询性能优异,或者符合正在工作的上下文环境。
疯狂的技术宅
2019/03/27
1.7K0
SQL 教程:如何编写更佳的查询
mysql查询字段中带空格的值的sql语句,并替换
(自己写的这四行)查询带有空格值的数据:SELECT * FROM 表名 WHERE 字段名 like ‘% %’;
全栈程序员站长
2022/07/11
9.4K0
怎么编写容易读懂的SQL查询
毫无疑问,编写代码与其说是一门科学,不如说是一门艺术。即使有经验,每个程序员也不能编写既可读又可维护的漂亮代码。一般来说,当您学习编码的艺术时,编码会随着经验而改进,例如,喜欢使用 类的组合来代替类的继承或者基于接口编码而不是实现,但是只有少数开发人员能够掌握这些技术。 SQL查询也是如此。构建查询的方式和编写查询的方式,对于向开发人员传达您的意图大有帮助。当我在多个开发人员的邮件中看到SQL查询时,我可以看到他们的写作风格有明显的不同。 一些开发人员编写得非常整洁,并且对查询进行了适当的缩进,这使得很容易
程序你好
2018/07/20
8600
Sql 中的变量使用
我们在学 Python 或者其他编程语言的时候都应该有学过变量这么一个东西,可是 Sql 这种查询语言中怎么也有变量呢?具体有什么用呢?
张俊红
2019/08/28
11.5K1
如何编写更好的SQL查询:终极指南(上)
结构化查询语言(SQL)是数据挖掘分析行业不可或缺的一项技能,总的来说,学习这个技能是比较容易的。对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适合于你的数据库操作工作,才是最重要的。这个教程将会提供给你一些步骤,来评估你的查询语句。 首先,应该了解学习SQL对于数据挖掘分析这个工作的重要性; 接下来,应该先学习SQL查询语句的处理和执行过程,以便可以更好的了解到,编写高质量的查询有多重要。具体说来就是,应该了解查询是如何被解析、重写、优化和最终评估的; 掌握了上面一点之后,你不仅需要重温初学
数据和云
2018/03/08
2.3K0
如何编写更好的SQL查询:终极指南(上)
如何编写更好的SQL查询:终极指南(下)
SQL是数据挖掘分析行业不可或缺的一项技能,对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适合于你的数据库操作工作,才是最重要的。在上一篇文章中,我们分享了评估查询语句的步骤和方法(参考:如何编写更好的SQL查询:终极指南(上))今天我们从更深入的角度继续分析。 时间复杂度和大O符号 通过前两篇文章,我们已经对查询计划有了一定了解。接下来,我们还可以借助计算复杂度理论,来进一步深入地挖掘和思考性能的提升。理论计算机科学这一领域聚焦于:根据难度来对计算问题进行分类。这些计算问题可以是算法问题
数据和云
2018/03/08
2.2K0
如何编写更好的SQL查询:终极指南(下)
sql中的嵌套查询_sql的多表数据嵌套查询
测试的时候发现取出的是一条数据, 因为测试的时候是一天中的两条数据, 没有不同的日期,所以当日以为是正确的 ,然而第二天写入数据了,要取出数据,却发现没有数据, 返回空的行, 以为都是代码又有问题 了,找了半天都没有 ,仔细看看了存储过程中的代码,发现这样返回的数据的确是空的。
全栈程序员站长
2022/09/22
7.1K0
sql中declare声明变量_sql怎么定义变量
1、系统变量的特点: (1)、每个客户机成功连接服务器后,都会产生与之对应的会话。会话期间,服务实例会在服务器内存中生成与该会话对应的会话系统变量。这些会话系统变量的初始值都是全局系统变量值的复制,有了标记不同的会话,会话系统又新增了一些变量,这些变量是全局扁郎没有的。
全栈程序员站长
2022/09/24
2.4K0
如何在 Bash 中编写函数
在编程时,实际上是在定义要由计算机执行的 过程(procedure)或 例程(routine)。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程:
用户1880875
2021/09/15
1.8K0
如何在 Bash 中编写函数
在编程时,实际上是在定义要由计算机执行的 过程(procedure)或 例程(routine)。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程:
用户1880875
2021/09/16
1.8K0
如何在Bash中编写循环?
人们想要学习Unix shell的一个常见原因是释放批处理的功能。如果要对许多文件执行某些操作,一种方法是构造一个遍历这些文件的命令来实现。在编程术语中,这称为执行控制,最常见的示例之一是for循环。
用户6543014
2020/02/21
2.5K0
sql中declare的用法_sql局部变量
换工作了,以后主要和SqlServer打交道了,仿佛回到了大学,不知道学校的饭还是那么好吃又便宜吗?北京的饭好贵;不知道门口那家板面的生意是不是还是那么红火,好想再去吃一碗。。。
全栈程序员站长
2022/09/24
1.8K0
sql中declare的用法_sql局部变量
SQL中declare申明变量
select @id = column_id from table where column_user = ‘ABC’
全栈程序员站长
2022/07/13
1.1K0
如何在 SQL 中查找重复值? GROUP BY 和 HAVING 查询示例教程
如果您想知道如何在表中查找重复值,那么您可以在 SQL 中使用 GROUP BY 和 HAVING 子句。 使用 group by 您可以创建组,如果您的组有超过 1 个元素,则意味着它是重复的。 例如,您需要编写一个 SQL 查询来查找名为 Person 的表中的所有重复电子邮件。 这是一个流行的 SQL Query 面试问题以及 Leetcode 问题。 您可以看到电子邮件 a@b.com 是重复的电子邮件,因为它在表格中出现了两次。 您需要编写一个查询来查找所有重复值。
从大数据到人工智能
2022/03/30
15.4K0
sql中对嵌套查询的处理原则_sql的多表数据嵌套查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169416.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
5.7K0
SQL中查询效率优化
索引是独立于表的一中物理存储结构,当我们语句中用到索引的字段的时候,数据库会首先去索引中查找满足条件的数据的索引值(相当于页码),然后在根据索引值去表中筛选出我们的结果。 当我们使用索引和不使用索引的时候,效率会相差相当大,特别是当数据量越来越大的时候。 另外需要注意的是并不是我们在where条件里面用有索引的字段进行筛选数据库在查询的时候就会走索引,有些写法会让数据库不走索引,接下来会总结一些会让查询进行全表扫描而不走索引的写法;
Awesome_Tang
2018/09/11
2.6K0
SQL中查询效率优化
sql中的联合查询「建议收藏」
我们在实际应用中,或许会用到关于sql的联合查询的应用,下面来总结一下联合查询的具体应用,做一下记录便于记忆。
全栈程序员站长
2022/08/26
2.3K0
oracle中sql的递归查询运用
主键 名字 职位 上级id 部门id
小小鱼儿小小林
2020/06/23
2.7K0
点击加载更多

相似问题

查找最高分数并打印

220

查找并仅显示表中最高的分数

32

在多个列中查找最高分数

32

尝试使用循环查找学生的最高分数

222

使用循环从列表中查找最高分数和最低分数

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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