30分钟学会React Hook, Memo, Lazy
我们来学习React 16.8里的新特性。
1. 自行配置好React的环境,推荐你使用Create React APP, 你也可以下载本文档Zip解压到本地直接运行. https://github.com/yurizhang/fed-study/blob/master/my-project.zip
cd my-projectyarn install
2. 在pages目录下新建test目录,我们使用这个目录来学习.在这里新建t1.js和t2.js
t1.js
/* eslint-disable no-console *//* eslint-disable react/button-has-type */
// import PageHeaderWrapper from '@/components/PageHeaderWrapper';
import React, {lazy, useState, useEffect} from "react";
const T2 = lazy(()=> import("./t2"));
const PageHeaderWrapper=(prop)=>{
console.log("子组件刷新...");
return (
<>
<div>{prop.loading}</div>
<div>{prop.content}</div>
</>
)
}
// React.memo()可接受2个参数,第一个参数为纯函数的组件,第二个参数用于对比props控制是否刷新,与shouldComponentUpdate()功能类似。
const Memo = React.memo(PageHeaderWrapper, (prevProps, nextProps) => {console.log(prevProps, nextProps);
return prevProps.loading === nextProps.loading
}
);
const rand=()=>{
// console.log("define rand");
const a=parseInt(Math.random()*10, 10);
if(a>=5){
return 1
}
return 0
}
const test=()=>{
const [count, setCount] = useState(1);
console.log('test 组件:',count);
useEffect(() => {
console.log('test组件:useEffect test',count);
document.title = `You clicked ${count} times`;
console.log('hello:', document.querySelector("#hello").innerHTML);
// 让我们传给useEffect的副作用函数 返回一个新的函数。这个新的函数将会在组件下一次重新渲染之后执行。
return function cleanup() {
console.log('useEffect hello:', document.querySelector("#hello").innerHTML);
console.log('test组件:useEffect return ',count);
};
}, []); // 给useEffect传第二个参数。用第二个参数来告诉react只有当这个参数的值发生改变时,才执行我们传的副作用函数(第一个参数)。
return (
<>
<Memo loading={count} content='test2' />
<div >Hell world!{count}</div>
<React.Suspense fallback="T2 loading...">
<T2 />
</React.Suspense>
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(rand)}>
Click me
</button>
</div>
</>
);
}
export default test;
t2.js 这里使用了axios,你要先安装一下,当然你也可以在你的模板文件public/index.htm里
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
/* eslint-disable no-console *//* eslint-disable react/button-has-type */
import React, {useState, useEffect} from "react";
const T2=(prop)=>{
const [message, setMessage]=useState(()=>{
return 'start...';
});
function temp(){
axios.get('http://route.showapi.com/1764-1').then(response=> {
console.log(response.data.showapi_res_error);
setMessage(response.data.showapi_res_error);
})
}
useEffect( () => {
temp()
}
); // 给useEffect传第二个参数。用第二个参数来告诉react只有当这个参数的值发生改变时,才执行我们传的副作用函数(第一个参数)。
return (
<>
<div>T2. message: {message}</div>
</>
)
}
export default T2;
以上是 30分钟学会React Hook, Memo, Lazy 的全部内容, 来源链接: utcz.com/z/384159.html