核心属性一:state
state:适用于类组件,React 类组件拥有自己的状态 state,state 状态改变时自动刷新组件(执行组件中的 render 方法)
修改状态
this.setState(nextState[,callback])
nextState: 将要设置的新状态,该状态会和当前的 state 合并
callback: 可选参数,回调函数。该函数会在 setState 设置成功,且组件重新渲染后调用.
如果依赖上次setState()的结果:setState(fn [,callback])
this.setState((prevState) => {
return { num: prevState.num + 1 };
});
注意事项
- setState()直接使用是异步的,在原生事件和setTimout中使用是同步的
- 多次
setState()
会自动合并,但是使用传入函数的方式,无法合并,传入对象可以 setState()
会自动刷新组件,也可以利用forceUpdate()
进行手动强制刷新
核心属性二:props
props:父组件传入子组件
- 接收方式
- 函数组件:通过函数的第一个参数
- 类组件:通过this.props访问 例如
<MyComponent data={100} name="tom" />
取值:this.props.data this.props.name
- props类型校验
给组件设置静态属性 propTypes 来设置组件各个属性的类型检查器, 用于限制传入属性的数据类型,在编写组件时比较有用
- React 内置数据类型检查器 PropTypes
在React16版本之后,PropTypes从react包分离到
prop-types
包中
import PropTypes from "prop-types";
class MyComponent extends React.Component{
}
MyComponent.propTypes = {
name: PropTypes.string
}
---------------------------------------------
class MyComponent extends React.Component{
staic propTypes = {
name: PropTypes.string
}
}
注意:如果使用ts可以完全取代上述的写法
props和state的区别
state是组件的状态,可读可写,props是父组件传递过来的属性,是只读的
核心属性三:ref
- 应用位置
- 应用在元素节点上:对节点的引用
- 应用在组件上:对组件实例的引用
- 使用ref的场景
- 管理焦点,文本选择或者媒体播放
- 触发强制动画
- 集成第三方DOM库
- 设置方式
- 字符串形式的ref
<input ref="input1" />
取值:this.refs.input1
- 回调形式的ref(官网推荐)
<input ref={c => this.input1 = c}
相当于把当前节点(DOM)(input输入框)赋值给了组件的实例属性input1
取值:this.input1
- createRef
myRef = React.createRef()
<input ref={this.myRef} />
取值:this.myRef.current
注意函数组件无法使用ref