counter:preState.quantity+ 1)" kaedah untuk mengubah suai keadaan; 3. Tukar keadaan komponen melalui kaedah "replaceState"."/> counter:preState.quantity+ 1)" kaedah untuk mengubah suai keadaan; 3. Tukar keadaan komponen melalui kaedah "replaceState".">
cari
Rumahhujung hadapan webSoal Jawab bahagian hadapanApakah kaedah bertindak balas terhadap perubahan keadaan?

Kaedah untuk bertindak balas kepada menukar keadaan ialah: 1. Ubah suai keadaan melalui "this.setState({title:'React'});" => ;counter:preState.quantity+1)" kaedah untuk mengubah suai keadaan; 3. Tukar keadaan komponen melalui kaedah "replaceState".

Apakah kaedah bertindak balas terhadap perubahan keadaan?

Persekitaran pengendalian tutorial ini: Sistem Windows 10, bertindak balas versi 18.0.0, komputer Dell G3.

Apakah cara untuk menukar keadaan dalam tindak balas?

Ubah suai keadaan dalam tindak balas dengan betul

Pertama, sebagai tindak balas, anda boleh terus mendapatkan negeri melalui this.state.{property}, tetapi apabila kita ingin mengubah suai negeri, terdapat banyak perangkap yang perlu diberi perhatian Berikut ialah tiga perangkap biasa:

tidak boleh mengubah suai keadaan secara langsung.

Komponen secara langsung mengubah suai keadaan dan tidak mencetuskan semula pemaparan. Contohnya:

this.state.title='React';

Kaedah pengubahsuaian yang betul ialah:

this.setState({title:'React'});
keadaan dikemas kini secara tak segerak

Apabila setState dipanggil, komponen state Ia tidak berubah serta-merta, tetapi meletakkan keadaan untuk diubah suai ke dalam baris gilir acara React mengoptimumkan masa pelaksanaan sebenar, dan atas sebab prestasinya sendiri, beberapa pengubahsuaian keadaan setState boleh digabungkan menjadi satu pengubahsuaian keadaan. Oleh itu, jangan bergantung pada keadaan semasa untuk mengira keadaan seterusnya, kerana apabila pengubahsuaian keadaan benar-benar dilakukan, kadangkala keadaan bergantung ini tidak dijamin sebagai keadaan terkini, kerana tindak balas itu sendiri akan menggabungkan beberapa keadaan menjadi satu, maka ini. Keadaan masih keadaan lama, jadi anda tidak boleh bergantung pada prop semasa untuk mengira keadaan seterusnya, kerana kemas kini prop juga tidak segerak. Sebagai contoh: dalam contoh tindak balas yang biasa digunakan, terdapat operasi mengklik tanda tambah untuk meningkatkan nilai sebanyak satu Jika anda mengklik + sekali, nombor akan meningkat sebanyak 1. Jika anda mengklik dua kali berturut-turut, ia akan masih meningkat sebanyak 1. Ini adalah apabila tindak balas digabungkan dan diubah suai kepada sekali , yang bersamaan dengan melaksanakan kod berikut:

Object.assign(
previousState,
{quantity:this.state.quantity+1},
{quantity:this.state.quantity+1},
)

Kemudian operasi sebelumnya ditimpa, dan nilai akhir hanya menambah 1. Pada masa ini, anda boleh menggunakan fungsi lain sebagai parameter setState Fungsi ini mempunyai dua parameter, parameter Satu pertama ialah keadaan komponen sebelum pengubahsuaian ini, dan parameter kedua ialah prop terkini.

Kaedah pengubahsuaian yang betul ialah:

this.setState((preState, props)=>counter:preState.quantity+1)
Kemas kini keadaan ialah proses gabungan

Apabila memanggil ssetState untuk mengubah suai Apabila bercakap tentang keadaan komponen, anda hanya perlu lulus dalam keadaan berubah, bukan keadaan lengkap, kerana kemas kini keadaan komponen ialah proses penggabungan Contohnya, keadaan komponen ialah:

this.state={

title:'React',

content:'React is an wondeful JS library'

}

Nota : Apabila anda hanya perlu mengubah suai tajuk, hantarkan tajuk yang diubah suai kepada setState:

this.setState({title:'ReactJs'});

react akan menggabungkan tajuk terbaharu kepada keadaan asal manakala mengekalkan kandungan keadaan asal , keadaan gabungan terakhir ialah:

this.state={
title:'ReactJs,
content:''React is an wondeful Js library
}

2. Nyatakan dan objek tidak berubah

React secara rasmi menganggap keadaan sebagai objek tidak berubah. . Di satu pihak, ia secara langsung mengubahsuai this.state , komponen tidak akan dipaparkan semula, semua keadaan yang terkandung dalam keadaan harus menjadi objek yang tidak boleh diubah dicipta semula dan bukannya mengubah secara langsung keadaan keadaan asal, kemudian apabila keadaan berubah, bagaimana untuk mencipta keadaan baharu? 🎜>

Jenis keadaan ialah Jenis tidak berubah (nombor, rentetan, bool, lembu jantan, tidak ditentukan)

Keadaan ini adalah yang paling mudah, kerana keadaan adalah jenis tidak berubah, jadi anda boleh terus memberikan nilai baharu kepada keadaan untuk diubah suai, seperti berikut Kiraan yang ingin kita ubah suai adalah daripada jenis nombor, dengan tiga keadaan tajuk (rentetan) dan kejayaan (bool):

this.setState({
count:1,
title:'React',
success:true
})

Jenis status ialah Array

Jika terdapat buku status jenis tatasusunan, apabila anda ingin menambah buku pada buku, anda boleh menggunakan kaedah concat tatasusunan atau sintaks lanjutan es6 (sintaks termaklum)
Kaedah 1: Gunakan praState, concat untuk mencipta tatasusunan baharu

 this.setState((preState)=>books:preState.books.concat(['React Guide']))
Kaedah 2: Sintaks penyebaran ES6

this.setState(preState=>books:[...preState,''React Guide])
Apabila kita memintas beberapa elemen daripada buku sebagai keadaan baharu, kita boleh menggunakan kaedah hirisan daripada tatasusunan:

this.setState(preState=>books:preState.books.slice(1,3))
Apabila menapis beberapa elemen daripada buku sebagai keadaan baharu, anda boleh menggunakan kaedah penapis:

 this.setState(preState => {
        books: preState.books.filter(item => {

        return item != 'React';

        })
    })
Nota: Jangan gunakan push, pop, shift, Kaedah unshift dan splice mengubah suai status jenis tatasusunan kerana kaedah ini mengubah suai tatasusunan asal, manakala concat, slice, dan penapis akan mengembalikan tatasusunan baharu.

Kaedah 3: Jenis keadaan ialah objek biasa (tidak termasuk: rentetan, tatasusunan)

Gunakan kaedah Object.assgin() daripada es6

this.setState({

onwer:Object.assgin({},preState.onwer,{name:'Jason'});

})
Gunakan sifat hamparan Objek:

this.setState(preState=>{
owner:{...preState.owner,name:'Jason'}
})

 

总结:

创建新的状态的关键是,避免使用会直接修改原对象的方法而是使用可以返回一个新对象的方法,当然可以使用Immutable的JS库(Immutable.js)实现类似的效果。

 

思考:

为什么React推荐组件状态的修改时不可变对象呢?

  1. 不可变对象的修改会返回一个新的对象,不用担心原对象在不小心的情况下修改导致的错误,方便程序的管理和调试
  2. 处于性能的考虑,对象组件的状态是不可变对象时,在组件的shouldComponentUpdate方法中仅需要比较前后两次状态对象的引用就可以判断状态是否真的改变,从而避免不必要的render调用

三:除了以上方法修改react组件的状态之外,我们还经常会用到replaceState改变组件的状态

 

replaceState()方法与setState()类似,但是方法只会保留nextState中状态,原state不在nextState中的状态都会被删除。使用语法:

replaceState(object nextState,[, function callback])

nextState,将要设置的新状态,该状态会替换当前的state。

callback,可选参数,回调函数。该函数会在replaceState设置成功,且组件重新渲染后调用。

如:

 class App extends React.Component{

     constructor(props);

      this.state={

      count:1

      title:'数字计算'

      }

}

handleClick=()=>{

  this.replaceState({

    count:this.state.count+1

  })

}

render(){
    return(
      <button>点我</button>
      )
  }

}

 

结果为:

 

{
count:1
}
推荐学习:《react视频教程

Atas ialah kandungan terperinci Apakah kaedah bertindak balas terhadap perubahan keadaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
react中canvas的用法是什么react中canvas的用法是什么Apr 27, 2022 pm 03:12 PM

在react中,canvas用于绘制各种图表、动画等;可以利用“react-konva”插件使用canvas,该插件是一个canvas第三方库,用于使用React操作canvas绘制复杂的画布图形,并提供了元素的事件机制和拖放操作的支持。

React是双向数据流吗React是双向数据流吗Apr 21, 2022 am 11:18 AM

React不是双向数据流,而是单向数据流。单向数据流是指数据在某个节点被改动后,只会影响一个方向上的其他节点;React中的表现就是数据主要通过props从父节点传递到子节点,若父级的某个props改变了,React会重渲染所有子节点。

react中antd和dva是什么意思react中antd和dva是什么意思Apr 21, 2022 pm 03:25 PM

在react中,antd是基于Ant Design的React UI组件库,主要用于研发企业级中后台产品;dva是一个基于redux和“redux-saga”的数据流方案,内置了“react-router”和fetch,可理解为应用框架。

react中为什么使用nodereact中为什么使用nodeApr 21, 2022 am 10:34 AM

因为在react中需要利用到webpack,而webpack依赖nodejs;webpack是一个模块打包机,在执行打包压缩的时候是依赖nodejs的,没有nodejs就不能使用webpack,所以react需要使用nodejs。

react是组件化开发吗react是组件化开发吗Apr 22, 2022 am 10:44 AM

react是组件化开发;组件化是React的核心思想,可以开发出一个个独立可复用的小组件来构造应用,任何的应用都会被抽象成一颗组件树,组件化开发也就是将一个页面拆分成一个个小的功能模块,每个功能完成自己这部分独立功能。

react和reactdom有什么区别react和reactdom有什么区别Apr 27, 2022 am 10:26 AM

react和reactdom的区别是:ReactDom只做和浏览器或DOM相关的操作,例如“ReactDOM.findDOMNode()”操作;而react负责除浏览器和DOM以外的相关操作,ReactDom是React的一部分。

react中forceupdate的用法是什么react中forceupdate的用法是什么Apr 19, 2022 pm 12:03 PM

在react中,forceupdate()用于强制使组件跳过shouldComponentUpdate(),直接调用render(),可以触发组件的正常生命周期方法,语法为“component.forceUpdate(callback)”。

react有没有双向绑定react有没有双向绑定Apr 21, 2022 am 10:24 AM

react中没有双向绑定;react的设计思想就是单向数据流,没有双向绑定的概念;react是view层,单项数据流只能由父组件通过props将数据传递给子组件,满足了view层渲染的要求并且更易测试与控制,所以在react中没有双向绑定。

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.