React学习Day4
Day4
-
代理
(1) 正向代理
eg:如图 当我访问http://www.weather.com.cn/data/cityinfo/101200101.html时会报跨域问题
这时候可以配置正向代理来解决这个问题,配置文件的路径:项目目录下/node_modules/react-scripts/config/webpackDevServer.config.js找到其中的proxy做如下配置
然后把请求url改写如下
就可以发现能够接受到数据了
(2) 反向代理 -
弹射 eject(把潜藏在 react- scripts 中的一系列技术栈配置都“ 弹射” 到应用的顶层, 然后我们就可以研究这些 配置细节了, 而且可以更灵活地定制应用的配置。整个过程不可逆,慎用.如果报错了重装依赖)
npm run eject(yarn eject) -
关于input更新state的几种方法(受控组件,多个input)
-
Derived State派生状态
static getDerivedStateFromProps(nextProps,preveState)
getDerviedStateFromProps是一个静态函数,这个函数不能通过this访问到class的属性,也并不推荐直接访问属性 而是通过参数提供的nextProps以及preveState来进行判断,根据新传入的props来新设到state.
需要注意的是,如果props传入的内容不需要影响到我们的state,那我们就返回一个null,这个值时必须要的 所以我们尽量把它卸载函数的末尾 -
挂载阶段的声明周期函数
(1) constructor(props)
做一些初始化的动作,例如初始化state,将事件处理行数绑定到类实例上
(2) static getDerivedStateFromProps(props,state)
在组件实例化后,和接受新的props后被调用.它必须返回一个对象来更新状态或者返回null来时新的props不需要任何state的更新
如果是由于父组件的props更改所带来的重新渲染,也会触发此方法
(3) render()
render()方法是必需的。当他被调用时,他将计算this.props
和this.state
,并返回以下一种类型:
a. React元素。通过jsx创建,既可以是dom元素,也可以是用户自定义的组件。
b. 字符串或数字。他们将会以文本节点形式渲染到dom中。
c. null,什么也不渲染
d. 布尔值。也是什么都不渲染。
(4) componentDidMount()
组件被装配后立即调用,初始化使得DOM节点应该进行到这里
通常在这里进行ajax请求
如果要初始化第三方的dom库,也在这里进行初始化.
只有在这里才能获取到真是dom.
声明周期函数的挂载顺序如下: -
卸载阶段的声明周期函数 componentWillUnmount(
组件被卸载并销毁之前立即被调用,在此方法中执行任何必要的清理,例如使定时器无效,取消网络请求或者清理在componentDidMount中创建的任何监听 -
更新阶段的声明周期函数
(1)static getDerviedStateFromProps(props,state)
(2)shouldComponetUpdate(nextProps,nextState)
默认为true,如果返回为false则componentWillUpdate,render和componentDidUpdate不会被调用,可以加条件减少不必要的渲染,增加性能
(3) render()
(4) getSnapshotBeforeUpdate(prevProps,prevState)
在reactrender()
后的输出被渲染到DOM之前被调用。它使您的组件能够在它们被潜在更改之前捕获当前值(如滚动位置)。
这个生命周期返回的任何值都将作为参数传递给componentDidUpdate()。
(5) componentDidUpdate(prevProps,prevState,snapshot)
当组件更新时,将此作为一个机会来操作DOM。只要您将当前的props与以前的props进行比较(例如,如果props没有改变,则可能不需要网络请求),这也是做网络请求的好地方。 -
对无状态组件用 React.memo(组件)
(1)我们把 参数是组件 返回值也是组件 这类组件我们叫 “高阶组件”(HOC)
(2)本质是高阶函数 (map filter forEach …)