【发布时间】:2023-03-08 19:50:01
【问题描述】:
在 React 中,这两种实现之间有什么真正的区别吗?
一些朋友告诉我FirstComponent 是模式,但我不明白为什么。 SecondComponent 似乎更简单,因为渲染只被调用一次。
第一:
import React, { PropTypes } from 'react'
class FirstComponent extends React.Component {
state = {
description: ''
}
componentDidMount() {
const { description} = this.props;
this.setState({ description });
}
render () {
const {state: { description }} = this;
return (
<input type="text" value={description} />
);
}
}
export default FirstComponent;
第二:
import React, { PropTypes } from 'react'
class SecondComponent extends React.Component {
state = {
description: ''
}
constructor (props) => {
const { description } = props;
this.state = {description};
}
render () {
const {state: { description }} = this;
return (
<input type="text" value={description} />
);
}
}
export default SecondComponent;
更新:
我将 setState() 更改为 this.state = {}(感谢 joews),但是,我仍然看不出有什么区别。一个比另一个更好吗?
【问题讨论】:
-
嗨,谢谢你的链接,这些组件只是一个示例,但是你如何链接显示facebook.github.io/react/tips/… 如果我需要这些数据,我可以将道具设置为状态......问题在这里是关于我应该如何将日期从道具存储到我的状态。
-
一个例子——一个可切换的组件(例如一个弹出框或抽屉)。父级知道组件应该开始打开还是关闭;组件本身可能知道它在某个时间点是否打开。在那种情况下,我认为
this.state = { isVisible: props.isVisible }是有道理的。取决于应用如何分配 UI 状态。 -
你应该阅读这个medium.com/@justintulk/…
-
2017 年,Facebook 在其文档中演示了使用道具设置初始状态:reactjs.org/docs/react-component.html#constructor
-
@Aurora0001 在您需要处理表单的情况下,比如说一个编辑表单,它会自行发出网络请求,但您需要使用将作为道具的值初始化输入那个组件。为了保持表单动态,这些值必须保持在状态。
标签: javascript reactjs components