---
# System prepended metadata

title: React useState

---

<style>
.description{
letter-spacing : 2px;
line-height : 28px;
text-align : justify;
}

.firstLine{
margin-left : 30px;
}

b{
font-weight : 700;
}
</style>

# React useState

[影片](https://youtu.be/1Pks5cmfr4A)

<div class="description">
<b>useState</b> 是用來改變React State的方法，一旦State被改變，React會幫助我們重新渲染網頁畫面，先看不用useState的範例。
</div>

```javascript=
function App() {
  let counter = 0;
  const counterHandler = () => {
    counter += 1;
    console.log(counter); // every click : 1, 2, ... n
  };

  return (
    <>
      <p>{counter}</p>
      <button onClick={counterHandler}>Click</button>
    </>
  );
}

export default App;
```

<div class="description">
以上程式碼只要我們點擊按鈕觸發<b>counterHandler</b>後，我們可以在console看到counter的數值變成1了，每點擊一次counter值就會+1，但奇怪的是我們在畫面上的counter值依舊是<b>0</b>，這是因為React<b>不知道畫面已經被改變了，這就是為什麼我們需要透過useState來告訴React我們的畫面有改變，必須重新渲染畫面。</b>
</div>

***
<div class="description">
接著讓我們看使用useState的範例
</div>


```javascript=
import { useState } from "react";

function App() {
  const [counter, setCounter] = useState(0);
  const counterHandler = () => {
    setCounter((counter) => counter + 1);
  };

  return (
    <>
      {counter} //every rerender : 1, 2, n ...
      <button onClick={counterHandler}>Click</button>
    </>
  );
}

export default App;
```
<div class="description">
useState會給我們兩個值，一個是變數的初始值，由程式碼第4行來看counter的值為0，第二個是改變這個值的方法，我們會透過這個方法去更動counter的值，一旦該方法被呼叫，React就會重新渲染我們網頁的畫面。
</div>