反应路由器传递道具以路由组件

Nei*_*gan 2 reactjs react-router

我正在尝试使用React Router将props从我的app.jsx传递到我的路由组件之一,但是出现以下错误

TypeError:无法读取未定义的属性“ acc”

这是我的app.jsx中的代码:

<Route exact path='/FileUpload' acc={this.state.account} ethAdd={this.state.ethAddress} component={FileUpload} />
Run Code Online (Sandbox Code Playgroud)

路由中的组件中的代码导致:

constructor(props) {
        super(props);
        this.setState({
            account: this.props.route.acc,
            ethAddress: this.props.route.ethAdd
        })
    }
Run Code Online (Sandbox Code Playgroud)

我从这里阅读其他解决方案并不能真正理解在响应路由器中传递道具的工作原理,有人可以帮助我理解我需要做什么吗?

sai*_*amr 10

这里有几种方法可以将 props 传递给路由组件。

使用 react-router v5,我们可以通过包裹一个<Route>组件来创建路由,这样我们就可以像这样轻松地将 props 传递给所需的组件。

<Route path="/">
    <Home name="Sai" />
</Route>
Run Code Online (Sandbox Code Playgroud)

同样,您可以在 v5 中使用 children 属性。

<Route path="/" children={ <Home name="Sai" />} />
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 react-router v4,则可以使用 render prop 传递它。

<Route path="/" render={() => <Home name="Sai" />} />
Run Code Online (Sandbox Code Playgroud)

(最初发布在https://reactgo.com/react-router-pass-props/


Uji*_*T34 9

<Route>不会将自定义道具传递给组件。使用渲染功能代替:

<Route exact path='/FileUpload' render={
  (props) => <FileUpload {...props} acc={this.state.account} ethAdd={this.state.ethAddress} />
} />
Run Code Online (Sandbox Code Playgroud)

正如SakoBu所述,您需要更改构造函数:

constructor(props) {
    super(props);
    this.state = {
        account: this.props.acc,
        ethAddress: this.props.ethAdd
    };
}
Run Code Online (Sandbox Code Playgroud)