Day21-State

前言

昨日我们学会了Props,而Props是由外传进来的资料,进而改变组件。而组件本身的状态我们称为State。

另外昨日忘记说明React对於Props是唯读的,跟Vue可以传递资料给父组件有些微差异。

State

不同於Props是唯读,State是可以进行操作改变资料。

而在React中,没错!!!,聪明如你应该想到React中的State = 资料,但我们通常会称为状态(State)。

以下对话:
A: 这个组件的状态怎麽有点奇怪
B: 你先把状态设为预设值看有没有变化

那要如何使用State???

useState

在function component中如果要使用State,我们必须从React中引入useState

import {useState} from 'react'

我们把useState打印出来看看

  const a = useState()
  console.log(a);

https://ithelp.ithome.com.tw/upload/images/20210919/20130419EblsK8EHEi.png

可以看到useState是个array,并且useState[0]为初始值,useState[1]为修改值的函式。

当我们把useState初始值设为100,即代表当前组件的State为100

  const a = useState(100)
  console.log(a);

https://ithelp.ithome.com.tw/upload/images/20210919/20130419FP7nyNkeQY.png

但你想喔,如果我们每次使用State都要用useState[0]、useState[1]操作我们的状态,是不是很麻烦???

我们可以使用解构赋值来取用阵列,并且修改函式我们会使用驼峰写法并且set为前缀。

import {useState} from 'react'

function App() {
  const [number, setNumber] = useState(100)
  return (
    <div className="App">
      {number} //100
    </div>
  );
}
export default App;

setState

我们新增一个Change的button并且绑定onClick事件。

这边注意一下在React中的事件通常为驼峰写法!!!

并且每按一次我们都会使number + 1。

import {useState} from 'react'

function App() {
  const [number, setNumber] = useState(100)
  const changFN = () => {
    setNumber(number + 1)
  }
  return (
    <div className="App">
      {number}
      <button onClick={changFN}>Change</button>
    </div>
  );
}
export default App;

各位可以实际操作一次,并且打开开发者检查。

你会发现,当我们每次更改number的数值,只会有number的element做更动,这也是Virtual DOM能够使性能优化更好。

/images/emoticon/emoticon01.gif


<<:  【Day06】Dataflow Level

>>:  Day 15: 人工神经网路初探 激活函数(下)

Gangstar Vegas 5.3.0o Apk Data For Latest Android

Gangstar Vegas For Android Latest Gangstar Vegas i...

Day13-pod服务处 介绍service

之前提到了两种跟pod互动的方式,上一章介绍了port-forward这个方法,这一章则会介绍ser...

Transactions (2) - Data Object Operation

单物件 (Single-Object) 和多物件 (Multi-Object) 操作 多物件 (Mu...

每个人都该学的30个Python技巧|技巧 15:新增或删除串列元素(字幕、衬乐、练习)

今天已经是教串列中的第三篇了~之前讲到如何建立还有读取串列元素,不但可以只提取一个,还可以一次读取很...

Day 29:神奇语法糖-v-model

整个系列都快要完结篇了,怎麽可能独漏 Vue 的神奇语法糖—— v-model 呢?我们已经知道 V...