我在看Pluralsight关于React的课程,老师说道具不应该被改变。我现在正在读一篇关于道具vs.国家的文章(uberVU/react-guide),它说
道具和状态更改都会触发呈现更新。
文章后面说:
Props(属性的缩写)是组件的配置,如果可以的话,是它的选项。它们是从上面接收的,是不可变的。
所以道具可以改变,但它们应该是不可变的?
什么时候应该使用道具,什么时候应该使用状态?
如果你有一个React组件需要的数据,它应该通过道具或设置在React组件通过getInitialState?
我想用一种简单的方式向你解释状态和道具:
状态
我们使用状态来存储一些数据。它也像一个变量,当你改变它时,你的组件将再次呈现。
要使用状态,你需要导入useState钩子:
import { useState } from 'react';
const [state_name,function_name] = useState(initial_value);
您可以通过state_name访问您的状态,也可以通过function_name更改它并为其设置一个新值。
更多信息:https://reactjs.org/docs/state-and-lifecycle.html
道具
它是一种将数据从一个组件发送到另一个组件的机制。它看起来也像CSS中的属性。例如:
<Component props_value={custom_function} />
你可以发送一个自定义函数到组件,并接收它进行操作。
更多信息:https://reactjs.org/docs/components-and-props.html
道具和状态之间的关键区别在于,状态是内部的,由组件本身控制,而道具是外部的,由呈现组件的任何东西控制。
function A(props) {
return <h1>{props.message}</h1>
}
render(<A message=”hello” />,document.getElementById(“root”));
class A extends React.Component{
constructor(props) {
super(props)
this.state={data:"Sample Data"}
}
render() {
return(<h2>Class State data: {this.state.data}</h2>)
}
}
render(<A />, document.getElementById("root"));
状态可以改变(可变的)
而道具不能(不可变)