【问题标题】:React: Can I pass component default state values via props?React:我可以通过 props 传递组件的默认状态值吗?
【发布时间】:2017-05-14 15:22:43
【问题描述】:

例如:

<Counter start="10">

... 

export default class Counter extends React.Component {

    constructor(props) {

        super();

        this.state = {
            start: props.start
        };
    }
}

我用谷歌搜索了这个问题,我发现我找到的答案已经过时了

StackOverflow 上的问题

但我在 React 博客中找到了这篇文章:React v0.13.0 Beta 1

在那个帖子中,作者完全按照我的意愿行事,据我所知,getDefaultProps 现在已被弃用。

所以问题是:通过 props 传递状态仍然是一种反模式吗?

【问题讨论】:

  • 是的。发布您需要这样做的原因,我们可以找到替代方案。
  • 示例在问题中:我有一个计数器,我需要将初始状态传递给组件。如果不通过属性,我该怎么做...

标签: javascript reactjs frameworks


【解决方案1】:

恕我直言,“是”,因为您给人的印象是更改道具值会改变不会发生的组件行为。当我更改启动参数时,您的组件的行为将完全相同。

印象很酷,但需求是真实的。有时,当我需要这种类型的行为时,我只需将我的道具命名为 initialFoodefaultBar

【讨论】:

  • 但在某些情况下,更改状态变量(通过 props 获取其初始值)会改变组件的行为。在那些情况下,这不是要走的路
  • 是的,这就是我说“需求是真实的”时的意思;抱歉,如果这很简短。需求就在那里;例如,当你想实现一些类似于不受控制的组件的行为时,你只通过 props 提供 defaultValue。我建议为这些类型的道具制定一个命名约定...
  • 哦。我完全误解了。 :p
  • 抱歉,我问的方式令人困惑,“是”是对“我可以做”还是“它仍然是反模式”的回答吗?
  • 我应该更冗长一些;对于那个很抱歉。在对这个问题进行了更多思考之后;这只是我的拙见,我想说不是反模式,而是一种不好的做法。它不是反模式,因为该模式被不受控制的组件使用,并且无法绕过它。这是一种不好的做法除非你定义一个明确的命名约定,因为我之前已经说过了。
猜你喜欢
  • 2019-05-16
  • 2019-06-08
  • 2023-02-13
  • 2019-07-14
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多