【问题标题】:ReactJS: How do I set the default value for input components?ReactJS:如何设置输入组件的默认值?
【发布时间】:2015-11-02 08:14:33
【问题描述】:

当使用输入字段的默认值时,如何绕过来自 props 的状态的反模式?

当表单被渲染时,它应该包含一些默认值。当我设置一些值并关闭表单然后重新打开表单时,我希望显示默认值,而不是之前输入的值...

但是当我让 state 从 props 继承值时,props 会永远改变。我还没有找到解决这个问题的方法。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    如果你查看默认的input 组件,或者来自react-bootstrap 的输入,或者互联网上的大多数DatePickersSelects,你会发现它们中的大多数都有一个value 属性,并且它们中的大多数将几乎没有状态,至少在涉及到所选值时。

    input 的意思是uncontrolled,这意味着他们最好不要有状态,并且只接收作为道具的值,以及当值更改时他们应该调用的回调。由他们上方的controller-view 来观看这些事件并更改模型。有时,输入也可以方便地将值保持在状态中,但它们只能这样做,只要它们尊重作为道具传递的新值,因为状态持续存在重新渲染,getInitialState 只被调用一次。另见:ReactJS: Why is passing the component initial state a prop an anti-pattern?

    但是,由于 controller-view 处理所有这些值更改过于麻烦,React 附带了一个名为 ReactLink 的实用程序,非常简单地说,这是一种自动将 input 绑定到controller-view 状态下的属性。示例:您可以将input 绑定到模型的属性DateOfBirth,这是controller-view 状态的一部分。

    现在回到您的问题,您实际上并没有传递默认值,而是将值本身作为道具传递。 controller-view 应该决定它是什么。 DateOfBirth 字段的值是多少?没有?好的,我将默认值作为value 属性传递。

    【讨论】:

    • 感谢您的详尽回复。我遇到的问题是:处理来自输入的更新数据必须存储在状态中。正确的?因此,为了解决 state-from-props 问题,我最初可以将输入的值设置为 prop 的值,然后将更新后的值存储在 state 中。但是后来我的数据分布在道具和状态中,当我想提交数据时这是一个问题。反模式方式(如果可行的话会更有意义)是让 state 从 props 继承值。但这会永久改变道具的价值。
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多