简体   繁体   English

无法通过 react-router-dom 使用反应钩子

[英]Unable to use react hooks with react-router-dom

I'm using a class component as a parent for my functional components, using a useState hook while rendering the components with react-router crash the app, however, if the components are placed normally in the parent class component the app compiles fine.我正在使用 class 组件作为我的功能组件的父级,使用 useState 挂钩,同时使用 react-router 渲染组件会使应用程序崩溃,但是,如果组件正常放置在父级 class 中,则应用程序编译组件很好。

[error][1] [1]: https://i.stack.imgur.com/E4lKn.png [错误][1][1]:https://i.stack.imgur.com/E4lKn.png

this does NOT WORK:这不起作用:

 import React, {Component, useState} from 'react'; import {Route, BrowserRouter as Router, Switch} from 'react-router-dom' class App extends Component { render(){ return ( <Router> <Switch> <Route exact path='/' render={FrontPage}/> </Switch> </Router> ); } } const FrontPage = () => { const [a, b] = useState('') return ( <div> hello world </div> ) } export default App;
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

this WORKS这个作品

 import React, {Component, useState} from 'react'; //import {Route, BrowserRouter as Router, Switch} from 'react-router-dom' class App extends Component { render(){ return ( <FrontPage/> ); } } const FrontPage = () => { const [a, b] = useState('') return ( <div> hello world </div> ) } export default App;
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<Route exact path='/' render={FrontPage}/>

That's not the correct way to use the render prop.这不是使用render道具的正确方法。 If you just want to pass in a component, you can use the component prop as in:如果你只想传入一个组件,你可以使用 component 属性,如下所示:

<Route exact path='/' component={FrontPage}/>

If you want to use the render prop, you need to pass in a function:如果要使用 render prop,需要传入一个 function:

<Route exact path='/' render={routeProps => <FrontPage {...routeProps} />}/>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM