javascript - ReactJS - 是从子组件提供参数更好,还是在父组件中提供参数更好 - 当回调相同时?

标签 javascript reactjs

所以,父级是这样的:

...
render() {
  <SomeChild onSomeAction={this.onSomeAction} />
  <OtherChild onSomeAction={this.onSomeAction} />
}
...

我需要从每个子组件传递一个具有不同值的相同参数。

那么 - 哪一个更好?

<强>1。为每个子组件提供不同的值:

SomeChild:

...
    <button onClick={(e) => this.props.onSomeAction(e, true)}>Button</button>
...

OtherChild:

...
    <button onClick={(e) => this.props.onSomeAction(e, false)}>Button</button>
...

<强>2。在父级中指定具体值:

父级:

...
render() {
  <SomeChild onSomeAction={(e) => this.onSomeAction(e, true)} />
  <OtherChild onSomeAction={(e) => this.onSomeAction(e, false)} />
}
...

SomeChild:

...
    <button onClick={this.props.onSomeAction}>Button</button>
...

OtherChild:

...
    <button onClick={this.props.onSomeAction}>Button</button>
...

最佳答案

我会将此信息放在尽可能高的位置,在本例中是在父级中。如果您的子组件不需要知道传递给它们的 bool 值(或任何对象),并且如果它不应该改变它们的行为或以除此函数之外的任何方式影响它们,那么它们不应该不知道这个变量.

我会更进一步,使用柯里化(Currying)函数来提高可读性:

onSomeAction = value => ev => {/*   */}

render() {
  <SomeChild onSomeAction={this.onSomeAction(true)} />
  <OtherChild onSomeAction={this.onSomeAction(false)} />
}

组件通常应该只包含修改其行为的信息,以尽可能地可重用和灵活。

使用此解决方案,您可以稍后从该函数发送您想要的任何内容:

<SomeChild onSomeAction={this.onSomeAction('hi')} />

或者什么也没有:

onSomeAction = ev => {/*   */}

<SomeChild onSomeAction={this.onSomeAction} />

而你想要接收的东西无论如何也只会被父进程看到,而不需要出现在子进程中。

关于javascript - ReactJS - 是从子组件提供参数更好,还是在父组件中提供参数更好 - 当回调相同时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54686790/

相关文章:

javascript - Google 跟踪代码管理器 (GTM) 错误。预期的主要表达

css - 使用 JSX 或 Bootstrap 定位位于列表项上的 anchor 元素的最有效方法是什么

javascript - React 中的回调参数如何从子组件传递到父组件?

javascript - 如何将 Prop 传递给 Material UI 类

javascript - 分离元素上的 knockout 绑定(bind)

javascript - 为什么一个对象大于/小于或等于另一个对象?

javascript - 如何在 Electron 中正确使用preloads和window.api调用?

javascript - jquery - 在添加内容时转义引号问题

css - 如何防止 child 的内容拉伸(stretch) parent 的宽度

javascript - 在没有提示的情况下在新选项卡上的 IE11 中打开 PDF - mssaveoropenblob