React入门(三)

2019-11-15  本文已影响0人  Leonard被注册了

React Hooks

React提供很多钩子函数,可以让函数式组件拥有状态和常用的生命周期函数以及ref/context等

// 运用useState实现点击累加效果
export default function Test1(props) {
    let [state, setState] = useState(() => {
        // 懒初始化
        return {
            n: 0,
            m: 0
        }
    });
    // 使用生命周期
    useEffect(() => {
        console.log('All')
    })
    useEffect(() => {
        console.log('DidMount')
    }, [])
    useEffect(() => {
        console.log('DidUpdate')
    },[state.n])
    return <div>
        {state.n} === {state.m}
        <button onClick={ev => {
            setState({
                ...state,
                n: state.n + 1
            });
        }}>N+</button>
        <button onClick={ev => {
            setState({
                ...state,
                m: state.m + 1
            });
        }}>M+</button>
    </div>
}
初始化后
点击N+按钮后
点击M+按钮后
// 运用useRef()实现输入框自动聚焦
export default function Test1(props) {
    let [state, setState] = useState(() => {
        return {
            n: 0,
            m: 0
        }
    });
    let inputBox = useRef();
    useEffect(() => {
        inputBox.current.focus();
    }, [])
    return <div>
        <input type="text" ref={inputBox} />
    </div>
}
// 运用useReducer()完成点击累加效果
function reducer(state, action) {
    state = { ...state };
    switch (action.type) {
        case 'ADDN':
            state.n++;
            break;
        case 'ADDM':
            state.m++;
            break;
    }
    return state;
}
export default function Test1(props) {
    let [state, dispatch] = useReducer(reducer, {
        n: 0,
        m: 0
    });

    return <div>
        {state.n} === {state.m}
        <button onClick={ev => {
            dispatch({
                type: 'ADDN'
            })
        }}>N+</button>
        <button onClick={ev => {
            dispatch({
                type: 'ADDM'
            })
        }}>M+</button>
    </div>
}
上一篇 下一篇

猜你喜欢

热点阅读