是否可以在不使用构造函数内的对象的情况下创建状态?我需要动态地在组件内部创建新的状态。有什么建议吗?
11dmarpk1#
状态对象实际上就是一个Javascript对象,因此它已经是动态的了。如果你愿意,你可以随时随地修改它。但是这完全打破了React提供给你的好的设计模式--数据的单一真实来源,并且不改变任何状态对象,给你一个发生的每个动作的完美历史,使调试变得易如反掌。这就是为什么他们鼓励您创建一个初始状态,然后使用setState,它只是在修改指定的字段时创建一个新的副本。向下跳至“正确使用状态”:https://facebook.github.io/react/docs/state-and-lifecycle.html如果你需要“动态地创建新的状态”,有什么理由你不能用初始值在构造函数中定义这些状态,不管你是否使用它们?我看不出有什么理由它们一开始就不存在,而只是有一个初始状态。更多关于你试图做什么的细节会很有帮助。
9fkzdhlc2#
如果你使用的是typescript,我会这样定义你的状态:
interface IComponentState { dynamicState: any }
然后您可以将任何对象分配给此dynamicState....或分配给它任何数量的选项...在普通JS中,你甚至不需要分配类型,所以它会更简单--只需要在开始时分配空对象
ijnw1ujt3#
在内部方法- render中创建状态是个坏主意。React建议在构造函数中只使用setState()或'state =...'。
wgx48brx4#
如果新状态元素的键(字符串)存储在变量newKey中,则可以使用
newKey
this.setState({ [newKey] : "new value" });
以动态添加状态。我发现这在基于模板呈现页面时很有用,因为我们事先不知道要呈现的元素(以及它们的状态变量要求)。
4条答案
按热度按时间11dmarpk1#
状态对象实际上就是一个Javascript对象,因此它已经是动态的了。
如果你愿意,你可以随时随地修改它。但是这完全打破了React提供给你的好的设计模式--数据的单一真实来源,并且不改变任何状态对象,给你一个发生的每个动作的完美历史,使调试变得易如反掌。
这就是为什么他们鼓励您创建一个初始状态,然后使用setState,它只是在修改指定的字段时创建一个新的副本。
向下跳至“正确使用状态”:https://facebook.github.io/react/docs/state-and-lifecycle.html
如果你需要“动态地创建新的状态”,有什么理由你不能用初始值在构造函数中定义这些状态,不管你是否使用它们?我看不出有什么理由它们一开始就不存在,而只是有一个初始状态。更多关于你试图做什么的细节会很有帮助。
9fkzdhlc2#
如果你使用的是typescript,我会这样定义你的状态:
然后您可以将任何对象分配给此dynamicState....或分配给它任何数量的选项...
在普通JS中,你甚至不需要分配类型,所以它会更简单--只需要在开始时分配空对象
ijnw1ujt3#
在内部方法- render中创建状态是个坏主意。
React建议在构造函数中只使用setState()或'state =...'。
wgx48brx4#
如果新状态元素的键(字符串)存储在变量
newKey
中,则可以使用以动态添加状态。
我发现这在基于模板呈现页面时很有用,因为我们事先不知道要呈现的元素(以及它们的状态变量要求)。