react学习记录

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 中的任何值,所以它永远都不需要重复执行。这并不属于特殊情况 —— 它依然遵循依赖数组的工作方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容