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

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

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

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

代码语言:javascript
运行
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
运行
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
运行
AI代码解释
复制
Warning: Failed prop type: Invalid prop `component` supplied to `Route`.

代码语言:javascript
运行
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
运行
AI代码解释
复制
const App = () => (
  <React.StrictMode>
    <Provider store={store}>
      <Router>{routes}</Router>
    </Provider>
  </React.StrictMode>
);

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

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

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

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

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

代码语言:javascript
运行
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

复制
相关文章
React高阶组件HOC的使用
高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。 高阶组件只提供逻辑代码 视图代码会做为参数传递给高阶组件进行渲染
明知山
2021/10/25
9990
React高阶组件HOC的使用
如何将Redux与React Hooks一起使用
React Redux在2019年6月11日发布的7.1版中提供了对Hooks的支持。这意味着我们可以在函数组件中将Redux与Hooks一起使用,而不是使用高阶组件(HOC)。
前端知否
2020/03/23
7.1K0
如何将Redux与React Hooks一起使用
React 高阶HOC (一)
高阶组件 (HOC) 是 React 中用于重用组件逻辑的高级技术。HOC 本身并不是 React API 的一部分。它们是从 React 的组合性质中出现的一种模式。
ronixiao
2022/08/08
8490
React 高阶HOC (一)
React 高阶组件HOC
概述 高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧,通俗的讲,高阶组件就是一个 React 组件包裹着另外一个 React 组件。它本身并不是 React 的 API,而是一种 React 组件设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 react-redux。 高级组件使用函数来实现,基本上是一个类工厂,它的函数签名可以用类似 haskell 的伪代码表示: hocFactory:: W: React.Com
xiangzhihong
2018/02/06
1.7K0
React系列-Mixin、HOC、Render Props
在讲react-hooks之前,我们来捋捋react状态逻辑复用相关知识点,这会帮助你理解hooks
落落落洛克
2021/01/08
2.4K0
React系列-Mixin、HOC、Render Props
「react进阶」一文吃透React高阶组件(HOC)
React高阶组件(HOC),对于很多react开发者来说并不陌生,它是灵活使用react组件的一种技巧,高阶组件本身不是组件,它是一个参数为组件,返回值也是一个组件的函数。高阶作用用于强化组件,复用逻辑,提升渲染性能等作用。高阶组件也并不是很难理解,其实接触过后还是蛮简单的,接下来我将按照,高阶组件理解?,高阶组件具体怎么使用?应用场景, 高阶组件实践(源码级别) 为突破口,带大家详细了解一下高阶组件。本文篇幅比较长,建议收藏观看
用户6835371
2021/06/01
2.2K0
「react进阶」一文吃透React高阶组件(HOC)
React篇(048)-什么是高阶组件(HOC)?
高阶组件(HOC) 就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件,它只是一种模式,这种模式是由react自身的组合性质必然产生的。
齐丶先丶森
2022/05/12
4820
应用connected-react-router和redux-thunk打通react路由孤立
在我们开发过程中,很多时候,我们需要让组件共享某些数据,虽然可以通过组件传递数据实现数据共享,但是如果组件之间不是父子关系的话,数据传递是非常麻烦的,而且容易让代码的可读性降低,这时候我们就需要一个 state(状态)管理工具。常见的状态管理工具有 redux,mobx,这里选择 redux 进行状态管理。值得注意的是 React 16.3 带来了全新的Context API,我们也可以使用新的 Context API 做状态管理。Redux 是负责组织 state 的工具,但你也要考虑它是否适合你的情况。
Run丘比特
2020/11/19
2.4K0
应用connected-react-router和redux-thunk打通react路由孤立
【React深入】从Mixin到HOC再到Hook(原创)
前端发展速度非常之快,页面和组件变得越来越复杂,如何更好的实现 状态逻辑复用一直都是应用程序中重要的一部分,这直接关系着应用程序的质量以及维护的难易程度。
ConardLi
2019/05/23
1.8K0
slim.fully_connected()
def fully_connected(inputs, num_outputs, activation_fn=nn.relu, normalizer_fn=None, normalizer_params=None, weights_initializer=initializers.xavier_initializer()
狼啸风云
2019/08/29
3.8K0
Ansible Ad-Hoc与常用模块
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
1.7K0
Ansible Ad-Hoc与常用模块
如何将CocoaPods与多个Framework子项目一起使用
假设主项目是MAIN_APP,两个子项目是FRAMEWORK_A和FRAMEWORK_B。
freesan44
2019/10/12
4.2K0
精读 React 高阶组件
高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧。它本身并不是 React 的 API,而是一种 React 组件的设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 react-redux。
前端迷
2019/08/09
9870
精读 React 高阶组件
React组件复用的方式
现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护、可复用的代码就变得尤为重要,在React中组件是代码复用的主要单元,基于组合的组件复用机制相当优雅,而对于更细粒度的逻辑(状态逻辑、行为逻辑等),复用起来却不那么容易,很难把状态逻辑拆出来作为一个可复用的函数或组件,实际上在Hooks出现之前,都缺少一种简单直接的组件行为扩展方式,对于Mixin、HOC、Render Props都算是在既有(组件机制的)游戏规则下探索出来的上层模式,一直没有从根源上很好地解决组件间逻辑复用的问题,直到Hooks登上舞台,下面我们就来介绍一下Mixin、HOC、Render Props、Hooks四种组件间复用的方式。
WindRunnerMax
2021/02/25
2.9K0
12. 精读《React 高阶组件》
本期精读文章是:React Higher Order Components in depth
黄子毅
2022/03/14
5100
12. 精读《React 高阶组件》
React组件复用的发展史
React MiXin只能通过React.createClass()来使用,如下:
夏天的味道123
2022/10/03
1.4K0
React的组件复用的发展史
React MiXin只能通过React.createClass()来使用,如下:
夏天的味道123
2022/12/07
1.6K0
React中的高阶组件
高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合特性而形成的设计模式。
WindRunnerMax
2021/01/18
3.9K0
SQL Server Ad Hoc Distributed Queries开启与关闭
文章时间:2020年3月23日 14:58:27 解决问题:Ad Hoc Distributed Queries的启用与关闭 直接复制下面的命令进行执行即可。 启用Ad Hoc Distributed Queries exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 关闭Ad Hoc Distributed Queries
华创信息技术
2020/03/25
8290
【19】进大厂必须掌握的面试题-50个React面试
这是最有可能由面试官提出的 常被问到的50个React面试问答。为了方便您访问,我对React面试问题进行了归类:
全栈程序员站长
2021/04/07
11.5K0

相似问题

如何将HoC与React Native一起使用

116

将TypeScript与React HOC、React.lazy和forwarRef一起使用

135

将Apollo GraphQL HOC模式与现有的HOC一起使用

11

将redux与不带connect HOC的react-hooks一起使用

127

使用HOC的React路由器渲染方法

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档