我应该总是在道具或州上设置属性吗?

时间:2017-07-24 17:22:03

标签: reactjs react-native

在react-native中创建自定义Component时,最好将其属性作为状态或道具的一部分,或者在自定义类中“直接”声明有时是好的做法吗? (例如,this绑定到自定义Component的实例,foo属性绑定到this.foo而不是this.state.foothis.props.foo })

1 个答案:

答案 0 :(得分:3)

  

在react-native中创建自定义Component时,最好将其属性作为状态或道具的一部分,或者直接声明""在定制课内部有时候是好的练习吗?

这取决于。如果某些东西不适合作为州或作为道具,那么就不要把它作为一个。并非一切都是国家的一部分,并非一切都是道具。将某些东西置于不应该存在的状态会产生后果,例如不必要的和重复的重新渲染和意外行为。

想象一下,我们在组件中有一个输入元素。让我分解它在概念上属于组件的prop,state和direct属性。

将道具视为参数或输入函数,毕竟React组件只是一个函数。道具用于创建具有不同参数的组件,例如输入的占位符等HTML元素的属性。如果某个东西是组件的属性,例如组件的CSS,那么它在概念上就是 a prop

State表示组件的状态,因此是名称。假设我们想控制输入,我们必须管理输入中文本的值。如果组件基于交互具有不同的状态,则需要状态来跟踪组件所处的状态,并且需要状态属性,例如输入中文本的当前值。 this.state拥有管理组件不同状态所需的一切。

假设我们希望专注于focus的输入(在React的上下文中,而不是React Native用于说明目的)。我们可以使用ref来处理它并获取底层的DOM元素。由于底层DOM元素不是组件的参数或参数,因此它作为道具并不合理。管理输入组件的状态也不需要底层DOM元素。因此,它作为组件的直接属性是有意义的。另请注意,组件内的所有方法都直接在组件上设置,而不是在州或道具内。一个经验法则是,如果某个值不适合作为道具或状态那么就不要把它放在那里