解决React-router-dom 4.0+路由跳转时出现警告: Warning: Failed prop type: Invalid prop 'component' of type 'objec

解决React-router-dom 4.0+路由跳转时出现警告: Warning: Failed prop type: Invalid prop ‘component’ of type ‘object’ supplied to ‘Route’, expected ‘function’.
备注:这个警告在5.0+的路由中已经被修复,以下内容提供给由于种种原因提供给不方便更换版本的朋友一个思路。

最近在使用React全家桶做项目,刚从vue转过来看来两天文档截至目前撸的很愉快,直到开始使用路由的时候出现以上警告…故事开始了。。。。停停停 直入主题吧
环境

"react": "^16.8.6"
"react-router-dom": "^4.3.1"

我使用路由版本是4.3.1测试所有4.0+版本都会出现以上警告。
代码
import React, { Component } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { Provider } from "react-redux";
import store from '@/store';
import Home from "@/pages/home/home.jsx";
import Detail from "@/pages/detail/detail.jsx";

class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <div>
          <BrowserRouter>
            <div>
              <Route path = "/" exact component = { Home } />
              <Route path=" / detail /:id" exact component ={ Detail } />
            </div>
          </BrowserRouter>
        </div>
      </Provider>
    );
  }
}
export default App;

解决方案

方案一

将组件通过函数返回,即:

<Route path = "/home/" exact component = {() => < Home />} />
<Route path = "/detail/:id" exact component = {() => < Detail />} />

但是这种方式通过params路由传参打印this.props得不到我们想要的,即获取不到this.props.match.params.id参数。。。传参只可以通过store,如果是小型不需要Redux的项目那岂不是很蛋疼。。

方案二

解读一下报警告的内容大致意思就是props需要通过函数返回而不是对象。那是不是可以换种写法把props当作参数传递给路由呢。。答案是显然的。。

 <Route path = "/home/" exact component = {(props) => <Home { ...props } /> } />
 <Route path = "/detail/:id" exact component = {(props) => <Detail { ...props } /> } />
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值