当前位置: 首页 > 知识库问答 >
问题:

将自定义道具传递给react router v4中的路由器组件

花烨
2023-03-14

我正在使用React Router创建一个多页面应用程序。我的主要组件是

{match: Object, location: Object, history: Object, staticContext: undefined}

一点也不像我期望的道具。下面是我的详细代码。

父组件(我试图在所有子组件中将“hi”作为一个称为“test”的道具传递):

import { BrowserRouter as Router, HashRouter, Route, Switch } from 'react-router-dom';
import Link from 'react-router';
import React from 'react';

import Home from './Home.jsx';
import Nav from './Nav.jsx';
import Progress from './Progress.jsx';
import Test from './Test.jsx';



export default class App extends React.Component {

  constructor() {
    super();

    this._fetchPuzzle = this._fetchPuzzle.bind(this);
  }

  render() {
    return (
      <Router>
        <div>
          <Nav />
          <Switch>
            <Route path="/" exact test="hi" component={Home} />
            <Route path="/progress" test="hi" component={Progress} />             
            <Route path="/test" test="hi" component={Test} />
            <Route render={() => <p>Page not found!</p>} />
          </Switch>
        </div>
      </Router>
    );
  }
}

儿童:

import React from 'react';
const CodeMirror = require('react-codemirror');
import { Link } from 'react-router-dom';

require('codemirror/mode/javascript/javascript')

require('codemirror/mode/xml/xml');
require('codemirror/mode/markdown/markdown');

export default class Home extends React.Component {

  constructor(props) {
    super(props);

    console.log(props)

  }

  render() {
    const options = {
      lineNumbers: true,  
      theme: 'abcdef'    
      // mode: this.state.mode
    };
    console.log(this.props)

    return (
      <div>
        <h1>First page bro</h1>        
        <CodeMirror value='code lol' onChange={()=>'do something'} options={options} />
      </div>);
  }
}

我对反应很陌生,所以如果我错过了一些明显的东西,我很抱歉。谢谢!


共有1个答案

武彭薄
2023-03-14

您可以通过使用路由渲染道具来向组件传递道具,从而内联组件定义。根据DOCS:

这样可以方便地进行内联渲染和包装,而无需进行上述不必要的重新安装。您可以在位置匹配时传入要调用的函数,而不是使用组件属性为您创建新的React元素。渲染道具接收与组件渲染道具相同的所有管线道具

因此,您可以将道具传递给组件,如

 <Route path="/" exact render={(props) => (<Home test="hi" {...props}/>)} />

然后你就可以像

this.props.test 

在您的主页中组件

另外,请确保您正在传递{…props},这样默认的路由器道具(如位置、历史记录、匹配等)也会传递到主页组件,否则传递给它的唯一道具是测试

 类似资料:
  • 问题内容: 我正在使用ReactRouter创建一个多页面应用程序。我的主要组件是,它呈现了所有到子组件的路由。我正在尝试通过路线传递道具,根据我所做的一些研究,子组件利用最常见的方式来挖掘传递下来的道具是通过它们继承的对象。但是,这个对象对我来说是未定义的。在子组件的函数上,我和我返回了一个看起来像这样的对象 看起来根本不像我期望的道具。这是我的详细代码。 父组件(我试图在所有子组件中将“ hi

  • 我有一个模态,我想在其中放置一个动态嵌套视图。我认为这样做的一个好方法是像这样使用 我想把一些道具传给这些组件,就像我平时在React中一样 最终,我将移动到存储/获取状态中的这些属性,但是考虑到当前的实现,在定义开关

  • 我是一个相当新的反应,这是一个我正在努力解决的问题。

  • 我无法使用反应路由器通过道具。我到现在为止的代码: 错误截图 我正试图访问控制台中的id,就这么简单。 错误仅在我尝试传递道具时显示 源链接:https://reacttraining.com/react-router/web/api/Route/route-props

  • 我在一个组件中有一个按钮,单击我想转到另一个组件并将状态传递给该组件。 是这样的: 但它不起作用。单击“我去添加新问题url”,但组件AddNewQuestionPage不会呈现。若我不把路线放在AddQuestions组件中,而是放在应用程序组件中,它就可以工作。它是整个应用程序的主要组件,使用Switch,还设置了其他路由。 但是,如果状态问题是从应用程序组件呈现的,我不知道如何将其传递给Ad

  • 我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误