我在通过React元素传递道具时遇到了一个问题(比如开关和路线)。在下面的示例中,我想将Dashboard组件的所有道具传递给Account组件。有没有办法做到这一点?
App.js
<Dashboard>
<Switch>
// Dashboard props to Account component
<Route path="/account" render={props => <Account {...props} /> } exact />
<Route path="/someothercomponent" component={Someothercomponent} />
</Switch>
</Dashboard>
Dashboard.js
render() {
const children = React.Children.map(this.props.children, child => {
var router = React.cloneElement(child, { image: this.state.image });
return router;
// Like this the router Element does receive the image prop from
// the Dashboard component. Now this image prop needs to be
// passed on to the Account component.
}
问题是组件重写了渲染道具。
删除component={Account}
我还在(道具)
周围添加了括号,以提高可读性
<Dashboard>
<Switch>
<Route
path="/account"
render={(props) => <Account {...props} /> }
exact
/>
<Route
path="/someothercomponent"
component={SomeOtherComponent}
/>
</Switch>
</Dashboard>
或者:
const renderMergedProps = (component, ...rest) => {
const finalProps = Object.assign({}, ...rest);
return( React.createElement(component, finalProps)
);
}
const PropsRoute = ({ component, ...rest }) => {
return (
<Route {...rest} render={routeProps => {
return renderMergedProps(component, routeProps, rest);
}}/>
);
}
<Router>
<Switch>
<PropsRoute path='/login' component={Login} auth={auth} authenticatedRedirect="/" />
<PropsRoute path='/trades' component={Trades} user={user} />
</Switch>
</Router>
来源
是的,请改为使用渲染
属性。
<Route path="path" render={() => <MyComponent {...this.props} />} />
我喜欢已经给出的一些答案。给你一种以不同方式解决这个问题的感觉,同时也给你一些可以学习和添加到工具箱中的东西。我会说使用上下文。上下文提供了一种通过组件树传递数据的方法,而无需在每个级别手动传递道具。https://reactjs.org/docs/context.html
因此,如果您进入您的帐户,并再次传递道具下来,这可能是一个很好的地方来实现这一点。
正确设置后,您可以在页面上执行类似的操作。但是,你不仅仅是传递了一个,而是传递了所有的道具。然后,如果您还需要将它们传递给下一个组件,该怎么办
<AppContext.Consumer>
{({prop1, prop2, prop3}) => {
}}
</AppContext.Consumer>
这是假设你在使用React.createContext()时命名变量AppContext;这个想法是,在许多级别传递道具对一些人来说可能很烦人,但是使用上下文,你可以随时引入属性,而不必担心你正确地传递了它们。一定要完整阅读这篇文章,有时你想使用上下文,有时你不想使用上下文。
如果读者做了上一节的练习,就会发现,如果不裁剪梯度,模型将无法正常训练。为了深刻理解这一现象,本节将介绍循环神经网络中梯度的计算和存储方法,即通过时间反向传播(back-propagation through time)。 我们在“正向传播、反向传播和计算图”一节中介绍了神经网络中梯度计算与存储的一般思路,并强调正向传播和反向传播相互依赖。正向传播在循环神经网络中比较直观,而通过时间反向传播其实是
问题内容: 当我反向遍历ArrayList时,我得到了IndexOutOfBoundsException。我尝试进行正向迭代,没有问题。我期望并知道列表中包含五个元素。代码如下: 正向迭代-工作正常,但对我没有用: 错误: 另外,如果有人知道反向迭代更好的习惯用法,我很乐意尝试一下。 问题答案: 由于数组(或)元素的编号从0到小于列表大小的1进行编号,因此开始迭代。这是一个相当标准的习惯用法: 请
问题内容: 我可以通过执行以下命令成功创建一个地方: 服务器返回。 现在,我想将有效负载存储在一个如下所示的JSON文件中: 所以我修改了要执行的命令,如下所示: 返回失败。为什么? 问题答案: 发送默认内容类型为的POST请求。如果要发送JSON请求,则必须指定正确的内容类型标头: 但这仅在服务器接受json输入的情况下有效。将在URL的末尾可能仅表明 输出 是JSON,这并不一定意味着它也将处
类似的问题没有解决我的问题:https://stackoverflow.com/a/36633892/2300773 在基于connect()的场景中使用 通过上下文传递存储区不起作用 由于react-router不将当前param作为上下文提供,所以我选择将当前param作为路由组件中的上下文添加。我可以一直访问组件树下的上下文,直到到达使用connect()设置的子组件为止。页面的初始呈现为子
使用sonar hudson和maven设置代码分析我的计划是每天运行分析,因此我尝试在hudson中传递参数,如下所示: 而不是每天手动输入/更改日期——有没有办法让它成为一个每天自动更改的参数?谢谢满足
我正在尝试使用PayPal REST API来处理使用银行帐户和路由号码的银行交易。 以下是我用于测试的 api 的引用:https://api.sandbox.paypal.com/v1/payments/payment 这是我的JSON: 以下是调用的响应:“{\”name\":\"NOT_IMPLEMENTED\"、\"消息\":\"NOT_IMPLEMENTED\"、\"informati