React学习总结part2:react-hooks的useState,useContext ,useReducer,useEffect

useState

  • useState的优点:便于管理数据的状态,多次声明状态的方式更加方便
  • useState的缺点:处理多层嵌套数据逻辑,比较吃力

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import Routers from './project/router.js';
import * as serviceWorker from './serviceWorker';

ReactDOM.render(
  <React.StrictMode>
    <Routers />
  </React.StrictMode>,
  document.getElementById('root')
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

router.js

import React from 'react';
import {BrowserRouter as Router,Route,Redirect} from 'react-router-dom';
import Hello from './pages/useState'

class Routers extends React.Component{
    render(){
        return(
            <div>
                <Router>
                    <Route path='/useState' component={Hello}></Route>
                    <Redirect from='*' to='/useState'></Redirect>
                </Router>
            </div>
        )
    }
}

export default Routers;

pages/useState.js

方法一:

import React,{useState} from 'react';
const Hello=()=>{
    const [age,setAge] = useState(1);
    const [name,setName] = useState('Lisa');
    const handelChange=(e)=>{
       let {value} = e.target;
       setAge(value);
    }
    const handelChangeName=(e)=>{
        let {value} = e.target;
        setName(value)
    }
    return(
        <div>
            <div><span>年龄{age}</span><input name='age' onChange={handelChange}/></div>
            <div><span>姓名{name}</span><input name='name' onChange={handelChangeName}/></div>
        </div>
    )
 }

export default Hello;

方法二

import React,{useState} from 'react';
function Hello(){  
    //count 计数结果  setCount方法 用来计算结果,更新  useState(0)设定的一个默认值
   const [count,setCount] = useState(10);
   return(
    <div>
        {count}
        <button onClick={()=>setCount(count+1)}>+</button>
        <button onClick={()=>setCount(count-1)}>-</button>
    </div>
   )
}

方法三

import React,{useState} from 'react';
function Hello(){  
    //count 计数结果  setCount方法 用来计算结果,更新  useState(0)设定的一个默认值
   const [count,setCount] = useState(10)
   const handleAdd=()=>{
       let newCount = count
       setCount(newCount+1)
   }
   const handelDel=()=>{
        let newCount = count
        setCount(newCount-1)
        //this.setState({count})
   }
   return(
    <div>
        {count}
        <button onClick={handleAdd}>+</button>
        <button onClick={handelDel}>-</button>
    </div>
   )
}

useReducer

useReducer:接收第一个参数是reducer函数,第二个参数是默认值(count 相当于state  dispatch函数)

 方式一

import React,{useReducer} from 'react';

const reducer=function(state,action){
    switch(action){
        case 'add':
            return state+1;
        case 'del':
            return state-1;
    }
}
function Hello(){
    // useReducer接收第一个参数是reducer函数,第二个参数是默认值
    // count 相当于state  dispatch函数
    const [count,dispatch] = useReducer(reducer,0)
    return(
        <div>
            <span>{count}</span>
            <button onClick={()=>dispatch('add')}>+</button>
            <button onClick={()=>dispatch('del')}>-</button>
        </div>
    )
}
export default Hello;

方式二

import React,{useReducer} from 'react';
const reducer=function(state,action){
    switch(action){
        case 'add':
            return {count:state.count+1};
        case 'del':
            return {count:state.count-1};
    }
}
function Hello(){
    const [state,dispatch] = useReducer(reducer,{count:0}); 
    const {count} = state;
    return(
        <div>
            <span>{count}</span>
            <button onClick={()=>dispatch('add')}>+</button>
            <button onClick={()=>dispatch('del')}>-</button>
        </div>
    )
}
export default Hello;

方式三

import React,{useReducer} from 'react';
const reducer=function(state,action){
    switch(action){  
        case 'add':
            return {count:state.count+1};
        case 'del':
            return {count:state.count-1};
    }
}
function Hello(){
    const [state,dispatch] = useReducer(reducer,{count:0}); 
    const {count} = state;
    return(
        <div>
            <span>{count}</span>
            <button onClick={()=>dispatch('add')}>+</button>
            <button onClick={()=>dispatch('del')}>-</button>
        </div>
    )
}
export default Hello;

useEffect

方式一

import React,{useState,useEffect} from 'react';
// 存在本地储存
function Hello(){
    //useState里的初始值来自于本地储存里的值
    const [value,setValue] = useState(
        localStorage&&localStorage.getItem('username')
    )
    useEffect(()=>{
        // 将Lisa存在本地储存里
        localStorage&&localStorage.setItem('username','Lisa')
    },[value,setValue]) 

    return (
        <div>
            <p>本地储存里的值:{value}</p>
        </div>
    );
}

export default Hello;

方式二

import React,{useState,useEffect} from 'react';

function Hello(){
    const [count,setCount] = useState(0);
    useEffect(()=>{
        console.log('componentDidMount');  //组件完成挂载
        console.log('componentDidUpdate');  //组件完成更新
        // 销毁
        return ()=>{console.log('componentWillUnMount');}
    }); 
    return(
        <div>
            <p>{count}</p>
            <button onClick={()=>{setCount(count+1)}}>点击按钮</button>
        </div>
    )  
}
export default Hello;

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值