在平时的react的使用中,我们通常使用生命周期函数中的shouldComponentUpdate
这个方法去判断是否有相关的值改变了,决定这个组件的render函数要不要执行,提高性能。但是在后来的react fibre中,提出了一个叫PureComponent
,它在底层帮我们实现了这个判断,不需要我们在每个组件里都去到这个生命周期函数中去定义。
答案是 componentDidMount
原因是因为:这个方法会在组件第一次挂载(被添加到DOM)的时候执行,在组件的生命周期中仅会执行一次。更重要的是我们不能保证在组件挂载之前异步请求已经完毕,这也就意味着我们将会尝试在一个未挂载的组件上调用setState
,这将不起作用。而在componentDidMount
中发起网络请求将保证这有一个组件可以更新了。
1 | render() { |
会有报错信息Warning: Failed prop type: Invalid prop 'component' supplied to 'Route': the prop is not a valid React component
后来在github上看到有人提出了同样的问题,下面有解决方案
我采用的做法是:
1 | const Content = () => this.renderContent(); |
用一个箭头函数封装一次就可以了
两个最大的用处:
组件的封装
组件的复用
React.createElement
和VDOM的h
函数都生成vnode
两者的本质区别
看模板和组件化的区别
两者的共同点
国内首推Vue。文档易读、易学、社区够大。推荐技术不是特别扎实的团队使用。
团队水平较高,推荐使用react。组件化和JSX
其实是一个很简单的事情,但是因为总是报错
因为检查了json
文件格式并没有错误,但是这个报错真的很笼统。
后来一下午试过去多方法,比如还安装了mockjs
和fetch-mock
发现都不行。
后来看某博客才发现,是因为路径的关系,因为用的create-react-app
搭的脚手架,所以webpack是内部封装的,js文件打包后都会被注册到外部public
文件的index.html里面,所以mock
的数据文件最好也放在public
下面。然后以index.html
的位置为准的地方请求mock数据,就是这样:
本来我以为就好了,后来发现请问我请求的路径在index.html
的下一层级,所以应该这样:
这样就好了,这个坑真大!!!!
普通UI组件写法:
1 | import React from 'react'; |
无状态组件写法:
1 | import React from 'react'; |
优点:
缺点: