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

通过开关元件向下传递支柱进行反应

葛修筠
2023-03-14

我在通过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.

      }

共有3个答案

段成益
2023-03-14

问题是组件重写了渲染道具。

删除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>

来源

左丘修齐
2023-03-14

是的,请改为使用渲染属性。

<Route path="path" render={() => <MyComponent {...this.props} />} />
翟嘉志
2023-03-14

我喜欢已经给出的一些答案。给你一种以不同方式解决这个问题的感觉,同时也给你一些可以学习和添加到工具箱中的东西。我会说使用上下文。上下文提供了一种通过组件树传递数据的方法,而无需在每个级别手动传递道具。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