欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React組件的數(shù)據(jù)掛載實現(xiàn)方式

 更新時間:2025年07月29日 09:02:56   作者:來自萬古的憂傷  
React中state為組件內(nèi)部可變數(shù)據(jù),通過setState更新;props為外部傳入的不可變參數(shù),兩者均可觸發(fā)渲染,但state由組件維護,props由父組件控制,列表需用key優(yōu)化性能,dangerouslySetInnerHTML用于內(nèi)聯(lián)HTML

1、狀態(tài)(state)

狀態(tài)就是組件描述某種顯示情況的數(shù)據(jù),由組件自己設(shè)置和更改,也就是說由組件自己維護,使用狀態(tài)的目的就是為了在不同的狀態(tài)下使組件的顯示不同

(1) 定義state

import React, {Component} from 'react'
import ReactDOM from 'react-dom'

class App extends Component {
    state = {name: 'React', isLiked: false}

    render() {
        return (
            <div><h1>歡迎來到{this.state.name}的世界</h1>
                <button> {this.state.isLiked ? '?取消' : '??收藏'}
                </button>
            </div>)
    }
}

ReactDOM.render(<App/>, document.getElementById('root'))
import React, {Component} from 'react'
import ReactDOM from 'react-dom'

class App extends Component {
    constructor() {
        super()
        this.state = {name: 'React', isLiked: false}
    }

    render() {
        return (<div><h1>歡迎來到{this.state.name}的世界</h1>
            <button> {this.state.isLiked ? '?取消' : '??收藏'}
            </button>
        </div>)
    }
}

ReactDOM.render(<App/>, document.getElementById('root'))

this.state 是純js對象,在vue中,data屬性是利用 Object.defineProperty 處理過的,更改data的數(shù)據(jù)的時候會觸發(fā)數(shù)據(jù)的 getter 和 setter ,但是React中沒有做這樣的處理,如果直接更改的話,react是無法得知的,所以,需要使用特殊的更改狀態(tài)的方法 setState 。

(2) setState

isLiked 存放在實例的 state 對象當中,組件的 render 函數(shù)內(nèi),會根據(jù)組件的 state 的中的 isLiked 不同顯示“取消”或“收藏”內(nèi)容。

  • 下面給 button 加上了點擊的事件監(jiān)聽。
import React, {Component} from 'react'
import ReactDOM from 'react-dom'

class App extends Component {
    constructor() {
        super()
        this.state = {
            name: 'React',
            isLiked: false
        }
    }

    handleBtnClick = () => {
        this.setState({
            isLiked: !this.state.isLiked
        })
    }

    render() {
        return (
            <div>
                <h1>歡迎來到{this.state.name}的世界</h1>
                <button onClick={this.handleBtnClick}>
                    {
                        this.state.isLiked ? '?取消' : '??收藏'
                    }
                </button>
            </div>
        )
    }
}

ReactDOM.render(
    <App/>,
    document.getElementById('root')
)

setState 有兩個參數(shù)

第一個參數(shù)可以是對象,也可以是方法return一個對象,我們把這個參數(shù)叫做 updater

  • 參數(shù)是對
this.setState({
  isLiked: !this.state.isLiked
})
  • 參數(shù)是方法
this.setState((prevState, props) => {
  return {
    isLiked: !prevState.isLiked
  }
})
  • 注意的是這個方法接收兩個參數(shù),第一個是上一次的state, 第二個是props setState 是異步的,所以想要獲取到最新的state,沒有辦法獲取,就有了第二個參數(shù),這是一個可選的回調(diào)函
this.setState((prevState, props) => {
  return {
    isLiked: !prevState.isLiked
  }
}, () => {
  console.log('回調(diào)里的',this.state.isLiked)
})
console.log('setState外部的',this.state.isLiked)

2、屬性(props)

props 是正常是外部傳入的,組件內(nèi)部也可以通過一些方式來初始化的設(shè)置,屬性不能被組件自己更改,但是你可以通過父組件主動重新渲染的方式來傳入新的 props 屬性是描述性質(zhì)、特點的,組件自己不能隨意更改。

之前的組件代碼里面有 props 的簡單使用,總的來說,在使用一個組件的時候,可以把參數(shù)放在標簽的屬性當中,所有的屬性都會作為組件 props 對象的鍵值。通過箭頭函數(shù)創(chuàng)建的組件,需要通過函數(shù)的參數(shù)來接收

props :

(1) 在組件上通過key=value 寫屬性,通過this.props獲取屬性,這樣組件的可復(fù)用性提高了。

(2) 注意在傳參數(shù)時候,如果寫成isShow=“true” 那么這是一個字符串 如果寫成isShow={true} 這個是布爾值

(3) {…對象} 展開賦值

(4) 默認屬性值

*.defaultProps = {
}
static defaultProps = {
  myname:"默認的myname",
  myshow:true
}

(5) prop-types 屬性驗證

import propTypes from "prop-types";

*.propTypes = {
    name: propTypes.string,
    age: propTypes.number
}
static propTypes = {
    myname: propTypes.string,
    myshow: propTypes.bool
}

3、屬性vs狀態(tài)

相似點:都是純js對象,都會觸發(fā)render更新,都具有確定性(狀態(tài)/屬性相同,結(jié)果相同)

不同點:

  1. 屬性能從父組件獲取,狀態(tài)不能
  2. 屬性可以由父組件修改,狀態(tài)不能
  3. 屬性能在內(nèi)部設(shè)置默認值,狀態(tài)也可以,設(shè)置方式不一樣
  4. 屬性不在組件內(nèi)部修改,狀態(tài)要在組件內(nèi)部修改
  5. 屬性能設(shè)置子組件初始值,狀態(tài)不可以
  6. 屬性可以修改子組件的值,狀態(tài)不可以

state 的主要作用是用于組件保存、控制、修改自己的可變狀態(tài)。 state 在組件內(nèi)部初始化,可以被組件自身修改,而外部不能訪問也不能修改。你可以認為 state 是一個局部的、只能被組件自身控制的數(shù)據(jù)源。

state 中狀態(tài)可以通過 this.setState 方法進行更新, setState 會導(dǎo)致組件的重新渲染。

props 的主要作用是讓使用該組件的父組件可以傳入?yún)?shù)來配置該組件。它是外部傳進來的配置參數(shù),組件內(nèi)部無法控制也無法修改。除非外部組件主動傳入新的 props ,否則組件的 props 永遠保持不變。

沒有 state 的組件叫無狀態(tài)組件(stateless component),設(shè)置了 state 的叫做有狀態(tài)組件(stateful component)。因為狀態(tài)會帶來管理的復(fù)雜性,我們盡量多地寫無狀態(tài)組件,盡量少地寫有狀態(tài)的組件。這樣會降低代碼維護的難度,也會在一定程度上增強組

4、渲染數(shù)據(jù)

  • 條件渲染
{
condition ? '渲染列表的代碼' : '空空如也'
}
  • 列表渲染
// 數(shù)據(jù)
const people = [{
    id: 1,
    name: 'Leo',
    age: 35
}, {
    id: 2,
    name: 'XiaoMing',
    age: 16
}]
// 渲染列表
{
    people.map(person => {
        return (
            <dl key={person.id}>
                <dt>{person.name}</dt>
                <dd>age: {person.age}</dd>
            </dl>
        )
    })
}

React的高效依賴于所謂的 Virtual-DOM,盡量不碰 DOM。

對于列表元素來說會有一個問題:元素可能會在一個列表中改變位置。要實現(xiàn)這個操作,只需要交換一下 DOM 位置就行了,但是React并不知道其實我們只是改變了元素的位置,所以它會重新渲染后面兩個元素(再執(zhí)行 Virtual-DOM ),這樣會大大增加 DOM 操作。

但如果給每個元素加上唯一的標識,React 就可以知道這兩個元素只是交換了位置,這個標識就是 key ,這個 key 必須是每個元素唯一的標識dangerouslySetInnerHTML

  • 對于富文本創(chuàng)建的內(nèi)容,后臺拿到的數(shù)據(jù)是
content = "<p>React.js是一個構(gòu)建UI的庫</p>"

處于安全的原因,React當中所有表達式的內(nèi)容會被轉(zhuǎn)義,如果直接輸入,標簽會被當成文本。

  • 這時候就需要使用 dangerouslySetHTML 屬性,它允許我們動態(tài)設(shè)置 innerHTML
import React, {Component} from 'react'
import ReactDOM from 'react-dom'

class App extends Component {
    constructor() {
        super()
        this.state = {
            content: "<p>React.js是一個構(gòu)建UI的庫</p>"
        }
    }

    render() {
        return (
            <div
                // 注意這里是兩個下下劃線 __html
                dangerouslySetInnerHTML={{__html: this.state.content}}
            />
        )
    }
}

ReactDOM.render(
    <App/>,
    document.getElementById('root')
)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來

    react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來

    這篇文章主要介紹了react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React如何利用Antd的Form組件實現(xiàn)表單功能詳解

    React如何利用Antd的Form組件實現(xiàn)表單功能詳解

    這篇文章主要給大家介紹了關(guān)于React如何利用Antd的Form組件實現(xiàn)表單功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-04-04
  • 淺談React組件在什么情況下會重新渲染

    淺談React組件在什么情況下會重新渲染

    當我們使用React編寫組件時,組件的重新渲染是一個重要的概念,本文主要介紹了React組件在什么情況下會重新渲染,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • React Hooks如何主動更新Hooks組件

    React Hooks如何主動更新Hooks組件

    這篇文章主要介紹了React Hooks如何主動更新Hooks組件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • React解析html 標簽的方法

    React解析html 標簽的方法

    在React中,解析HTML標簽通常是使用JSX(JavaScript XML)語法的一部分,這篇文章主要介紹了React 用來解析html 標簽的方法,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • React二維數(shù)組的幾種聲明和使用過程

    React二維數(shù)組的幾種聲明和使用過程

    React二維數(shù)組聲明需注意結(jié)構(gòu)與值的可變性,正確方法包括直接賦值或動態(tài)初始化,避免使用const map=[[]]導(dǎo)致長度固定,動態(tài)擴展時應(yīng)先定義一維數(shù)組再添加元素,確保數(shù)組大小可變
    2025-07-07
  • react-navigation之動態(tài)修改title的內(nèi)容

    react-navigation之動態(tài)修改title的內(nèi)容

    這篇文章主要介紹了react-navigation之動態(tài)修改title的內(nèi)容,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 在react項目中使用antd的form組件,動態(tài)設(shè)置input框的值

    在react項目中使用antd的form組件,動態(tài)設(shè)置input框的值

    這篇文章主要介紹了在react項目中使用antd的form組件,動態(tài)設(shè)置input框的值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • react類標簽的生命周期詳解

    react類標簽的生命周期詳解

    在React類組件中,生命周期方法是非常重要的概念,它們允許我們在組件的不同階段執(zhí)行代碼,這包括在組件掛載、更新以及卸載時執(zhí)行的生命周期方法,本文通過介紹React類組件中的生命周期方法,旨在幫助開發(fā)者深入理解組件的生命周期管理
    2024-11-11
  • react中value與defaultValue的區(qū)別及說明

    react中value與defaultValue的區(qū)別及說明

    這篇文章主要介紹了react中value與defaultValue的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論