不明白如何将道具传递给路线

Dont understand how to pass props to routes

这是我看到的将 props 传递给路由的少数几个示例之一,但我似乎无法让它工作

<Route path="/" render={()=><testPage num="2" someProp={100}/>}/>

下面的例子因为 "toggle" 未定义而向我抛出错误?

const MyProductPage = (props) => {
      return (
        <ProductPage 
          toggle={this.toggle.bind(this)}
          {...props}
        />
      );
    }

这是另一个:

<Route path="/path" render={(props) => <Component {...props} Props={} />} />

在这种情况下,{...props} 是什么意思? 我在哪里放置我的组件?请解释一下我真的很想明白谢谢! :)

嗯,对于您的 MyProductPage 组件,在此处使用 this 是不正确的。 MyProductPage 是功能组件,而不是 class 组件。

因为 props 像参数一样传递,您可以像使用任何其他参数一样访问它。

因此,下面的代码不应传递错误...但是,在不了解您的代码的情况下,我不确定您需要在哪里绑定 toggle 方法。

const MyProductPage = (props) => {
      return (
        <ProductPage 
          {...props}
          toggle={props.toggle}

        />
      );
    }

旁注:我也很确定 {...props} 需要首先列出。见下文。

如果您仍然遇到 toggle 返回未定义行为的问题,那么您可能需要更改父组件中更高层 this 的词法绑定。在这里设置就不行了

关于你的第二个问题,{...props}是展开运算符的一个例子。可以找到 React 友好的定义 here.

稍微改变一下例子:

  var exampleObject= {};
  exampleObject.foo = x;
  exampleObject.bar = y;
  var component = <Component {...exampleObject} />;

...传播运算符只是说,从 exampleObject 中获取所有方法,并将它们作为 props 传递下去。这是另一种说法:

 <Component foo={exampleObject.foo} bar={exampleObject.bar} />

这需要 exampleObject 中的所有内容 并将其向下传递。

想象一下,如果您有 20 个属性要传递给子组件。这可能会很快变得冗长,所以展开运算符只是一点语法糖,因此您不必全部写出来。

编辑:为了进一步将其与您的示例联系起来:

图像如果父组件像这样向下传递道具:

<MyProductPage {...exampleObject} />
// Includes .foo and .bar

然后,如果您不需要更改任何存储值,子组件可以这样看

const MyProductPage = (props) => {
      return (
        <ProductPage {...props} />
      );
    }
// still contains .foo and .bar

但是,如果您确实需要更改其中一个属性,则只需将其单独传递(有点像 "override"):

const MyProductPage = (props) => {
      return (
        <ProductPage 
           {...props}
           foo={props.foo + 1}
        />
      );
    }
// still contains .foo and .bar, but foo will be different.

{...props} 首先将所有内容向下传递,然后,您对 foo 的显式调用会覆盖向下传递的内容并为其赋予新值。