React Hooks之useState(一)

現(xiàn)有如下一個React應用:

import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
  constructor(...args) {
    super(...args);
    this.state = { text: "", checked: false };
  }
  render() {
    const { text, checked } = this.state;
    return (
      <div>
        <input
          type="text"
          value={text}
          onChange={e => this.setState({ text: e.target.value })}
        />
        <input
          type="checkbox"
          checked={checked}
          onChange={e => this.setState({ checked: e.target.checked })}
        />
        <ul>
          <li>{text}</li>
          <li>{checked.toString()}</li>
        </ul>
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

我們看到App組件是類組件,因為這里用到了state。state對象有兩個值,一個是輸入框的text值,一個是復選框的勾選值。這個應用做的事情,就是監(jiān)控輸入框text值的變化和復選框勾選值的變化(用了ul來顯示state的變化)。

由于React引入了React Hooks,什么是Hooks?說簡單點就是可以完全不用類來寫組件了,那用什么寫?函數(shù)。函數(shù)怎么使用state?使用userState函數(shù)。下面我們看看怎么用函數(shù)實現(xiàn)上述功能。

//導入useState
import React, { useState } from "react";
import ReactDOM from "react-dom";

//函數(shù)組件
function App() {
  //useState的參數(shù)為初始狀態(tài)值,返回了一個長度為2的數(shù)組,第一個元素就是我們類組件里的state對象,第二個元素是個函數(shù),作用相當于類組件里用的setState。這兩個元素的名字隨便是什么都可以
  const [state, setState] = useState({ text: "", checked: false });
  //此函數(shù)的參數(shù)為整個state的部分內(nèi)容,在調(diào)用setState的時候,用這個部分內(nèi)容更新對應的老的內(nèi)容
  const updateState = partialState =>
    setState(oldState => ({
      ...oldState,
      ...partialState
    }));
  return (
    <div>
      <input
        type="text"
        value={state.text}
        onChange={e =>
          updateState({
            text: e.target.value
          })
        }
      />
      <input
        type="checkbox"
        checked={state.checked}
        onChange={() => updateState({ checked: !state.checked })}
      />
      <ul>
        <li>{state.text}</li>
        <li>{state.checked.toString()}</li>
      </ul>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

至于state怎么設計,是分開一個一個處理還是像在本例中集中在一個對象管理,悉聽尊便。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容