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.在parent中指定具体值:
Parent
:
...
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>
...
解决方案
在这种情况下,我会将这些信息放在父级中尽可能高的位置。如果您的子组件不需要知道传递给它们的布尔值(或任何对象),并且如果它不应该改变它们的行为或以除此函数之外的任何方式影响它们,那么它们不应该知道这个变量.
我会更进一步,使用 curried 函数来提高可读性:
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} />
而你想收到的东西,反正只会被父母看到,不需要出现在孩子身上。
推荐阅读
- ios - 如何禁用按钮而不是tableview单元格中的当前?
- flutter - 在 Android 中更改 Flutter 的表情符号字体
- python - 烧瓶 url_for - 传递参数
- c# - 在 .NET Framework 4.8 中使用 Roslyn 执行的脚本(~.csx)在完成后是否会被卸载
- reactjs - 为什么用户注册公式包含单选按钮时无法提交?
- mysql - 尝试创建事件时出现一些语法错误
- python - 将 for 循环的结果分配给列时没有值
- r - 计算每次连续运行的中位数
- javascript - 如何在 react-chartjs-2 中设置 y 轴的值?
- python - 如何从节点和叶子列表中创建一个新的 N 元 ExpressionTree 对象?