我使用React Router创建了一个多页应用。我的主要组件是<App/>
,它将所有路由呈现给子组件。我尝试通过路径传递道具,并根据我所做的一些research,子组件最常用的方法是传递到传递的道具,这是通过他们继承的this.props.route
对象。但是,这个对象对我来说是不确定的。在子组件中的render()
函数中,我console.log(this.props)
并返回一个看起来像这样的对象
{match: Object, location: Object, history: Object, staticContext: undefined}
看起来不像我预期的道具。这是我的详细代码。
父组件(我试图传递单词&#34; hi&#34; down作为一个名为&#34;在我的所有子组件中测试&#34;)
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>);
}
}
我对React很陌生,所以如果我错过了一些明显的东西,我会道歉。 谢谢!
答案 0 :(得分:26)
您可以通过使用render
的{{1}}道具将道具传递给组件,从而内联您的组件定义。根据 the DOCS:
这样可以方便地进行内联渲染和包装 上面解释了不希望的重新安装。而不是有一个新的React 使用
相同的所有路径道具Route
道具为您创建的元素,您可以传入component
匹配时要调用的函数。渲染道具 接收与组件渲染prop
所以你可以把道具传递给像
这样的组件location
然后您可以像
一样访问它 <Route path="/" exact render={(props) => (<Home test="hi" {...props}/>)} />
在this.props.test
组件中
P.S。同时确保您传递的是
Home
以便 像{...props}
这样的默认路由器道具也被传递到location, history, match etc
组件 否则唯一传递给它的道具是Home
。