React 高阶组件HOC
以组件为入参,返回一个新组件,HOC内不修改原组件,透传所有参数
React.Context
Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。
栗子: let MyContext = React.createContext(defaultValue)
1, 在class中调用,挂载在class上的contextType属性会被重赋值为一个由React.CreateContext()创建的Context对象。这样能使this.context消费最近Context上的那个值
MyClass.contextType = myContext
或者
static contextType = myContext
2, 组件内使用
<MyContext.Provider value = {}>
</MyContext.Provider>
<MyContext.Consumer>
{ value => <todo them={value}></todo>}
</MyContext.Consumer>
React.setState((prevState, props), callback)
setState是异步操作的,所以想要立马得到结果,可以在callback中求职
this.setState((prevState,props)=>({counter:prevState.counter+props.increment}));
Hook
使用hooks需要满足两个条件
1,只在顶层使用
2,必须是在React函数组件内使用
useState
定义state变量,功能类似class中this.state。区别是使用useState可以定义各种初始化类型,而class中的state中必须是对象
useState 返回当前state以及更新state的函数,如下示例
const [count, setCount] = useState(0)
class: this.state({ count: 0 })
useEffect
可以吧useEffect看成componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。
个人理解,class中数据更新是由生命周期控制,但是很多时候生命中期中做的事情都是重复的,像是初次挂载还有更新。使用useEffect就是按功能来控制
useEffect做了什么?
告诉react组件需要在渲染后执行哪些操作
为什么在组件内部使用useEffect?
放在内部可以直接访问state变量和props。Hooks使用了闭包机制,数据都已经保存在作用域中,因此不需要特殊的API来读取。
useEffect会在每次渲染中执行吗?
是的。默认情况下,第一次和每次更新之后执行
清除副作用(返回一个函数)
[]里的数据用于监控,类似于ComponentDidUpdate(prevProps, preState),判断[]中的数据是否有变化在判断是否执行useEffect
如果想执行只运行一次的 effect(仅在组件挂载和卸载时执行),可以传递一个空数组([])作为第二个参数。这就告诉 React 你的 effect 不依赖于 props 或 state 中的任何值,所以它永远都不需要重复执行。这并不属于特殊情况 —— 它依然遵循依赖数组的工作方式。
