最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react如何修改循環(huán)數(shù)組對(duì)象的數(shù)據(jù)

 更新時(shí)間:2022年12月02日 09:21:36   作者:胖鵝68  
這篇文章主要介紹了react如何修改循環(huán)數(shù)組對(duì)象的數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

react修改循環(huán)數(shù)組對(duì)象的數(shù)據(jù)

問題描述

做一個(gè)消息評(píng)論列表,針對(duì)具體某一個(gè)消息,里面有“收藏”和“點(diǎn)贊”功能,但是發(fā)現(xiàn)直接修改對(duì)象的樹形,無(wú)法改變視圖,因此做了筆記,方便后續(xù)學(xué)習(xí)

解決辦法

循環(huán)遍歷所有的對(duì)象,然后修改對(duì)應(yīng)的值,重新設(shè)置 數(shù)組對(duì)象

案例說(shuō)明

import * as React from 'react';
import {
    Icon,
    Button,
    Input,
    Form,
} from 'antd';
import styles from './userinfo.less';
import logo from '/static/logo.svg';
import Connection from '@/store';
import Router from 'next/router';


// @ts-ignore
@Connection(({albums, loading}) => ({
    albums: albums,
    loading: loading.effects['_user/login'],
}))
export default class UserInfo extends React.Component {

    // 定義state數(shù)據(jù)
    state = {
        isEdit: false
    }
    
    // 異步獲取 JS 普通對(duì)象,并綁定在props上當(dāng)服務(wù)渲染時(shí), 我是最先執(zhí)行的聲明周期函數(shù)  first
    static async getInitialProps(props) {
        // 后面我來(lái)添加promise來(lái)模擬ajax請(qǐng)求,暫時(shí)讓你更容易理解
        return {
            username: 'Yijun Liu',
            address: 'USA. University of San Francisco',
            major: 'Computer Scientis',
            email: 'zhangsan@163.com',
            "messageList": [
                {
                    id: 1,
                    email: 'Yijun Liu@163.com',
                    message: 'Just setting up my Twitter.111111',
                    date: '2019-5-18 11:33:56'
                },
                {
                    id: 2,
                    email: 'Yijun Liu@163.com',
                    message: 'Just setting up my Twitter.222222',
                    date: '2019-5-18 11:33:56'
                },
                {
                    id: 3,
                    email: 'Yijun Liu@163.com',
                    message: 'Just setting up my Twitter.333333',
                    date: '2019-5-18 11:33:56'
                }
            ]
        };
    }

    // 構(gòu)造函數(shù), 我是 second
    constructor(props) {
        super(props);
        let {username} = this.props;
        console.log('huangbiao', username)
    }

    // 頁(yè)面加載完了,設(shè)置body的背景色    我是 Third
    componentDidMount () {
        document.getElementsByTagName('body')[0].style.background = '#E7ECEF';
        let {username, address, major, email, messageList} = this.props;
        console.log('huangbiao', username)
        this.setState({
            "username": username,
            "address": address,
            "major": major,
            "email": email,
            "messageList": messageList
        })
    }


    // 離開頁(yè)面處理的邏輯  我是 Last
    componentWillUnmount () {
    }

    // 頁(yè)面跳轉(zhuǎn)到首頁(yè)
    goHomePage () {
        Router.push('/profile');
    }

     // 收藏
    collectAction (messageObj, eventObj) {
        let { messageList } = this.state;
		// 循環(huán)遍歷 state中的 數(shù)組對(duì)象
        let newListData = messageList.map(function(item, idx){
            if (item.id === messageObj.id) {
				// 改變值
                return {
                    ...item, 
                    isCollect:  !messageObj.isCollect
                }
            } else {
                return item;
            }
        });
		// 變化之后的 JSON數(shù)組,重新賦值
        this.setState({
            messageList: newListData
        })
    }

    // 點(diǎn)贊
    complimentAction(messageObj, index, eventObj) {
        let { messageList } = this.state;
		// 修改具體數(shù)組對(duì)象中的值
        messageList[index]['isCompliment'] = !messageList[index]['isCompliment'];
		// 將修改后的數(shù)組對(duì)象克隆,然后再重新賦值
        // let newListData = JSON.parse(JSON.stringify(messageList));
        let newListData = messageList;
        this.setState({
            messageList: newListData
        })
    }

    // 獲取用戶的評(píng)論列表
    getMessageListHtml () {
        const that = this;
        let { messageList } = this.state;
        // 因?yàn)?messageList 是異步加載進(jìn)來(lái)的,所以最開始,是undefined
        if (!messageList) {
            messageList = [];
        }
        return messageList.map(function(messageObj, index){
            return (
                <div className={styles['message-container']} key={messageObj.id}>
                    <div className={styles.portrait}>
                        [外鏈圖片轉(zhuǎn)存失敗(img-aFNgwwai-1562046300900)(https://mp.csdn.net/static/logo.png)]
                    </div>
                    <div className={styles['info-container']}>
                        <div className={styles.author}>
                            {messageObj.email}
                        </div>
                        <div className={styles.theme}>
                            {messageObj.message}
                        </div>
                        <div className={styles.time}>
                            {messageObj.date}
                            <div className={styles['tool-bar']}>
                                <div className={styles['bar-btn']}>
                                    {/* 點(diǎn)贊 */}
                                    {
                                        messageObj.isCompliment ? 
                                        <Icon type="heart" onClick={that.complimentAction.bind(that, messageObj, index)} style={{color: 'red'}} /> 
                                        : <Icon type="heart" onClick={that.complimentAction.bind(that, messageObj, index)}/>
                                    }
                                </div>
                                <div className={styles['bar-btn']}>
                                    <Icon type="message" onClick={that.collectAction.bind(that, messageObj)}/>
                                </div>
                                <div className={styles['bar-btn']}>
                                    {/* 收藏 */}
                                    {
                                        messageObj.isCollect ? 
                                        <Icon type="star" onClick={that.collectAction.bind(that, messageObj)} style={{color: '#FEC603'}} />
                                        : <Icon type="star" onClick={that.collectAction.bind(that, messageObj)}/>
                                    }
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            );
        })
    }

    render() {
        let messageListHtml = this.getMessageListHtml();
        return (
            <div className={styles['userinfo-page']}>
               
                <div className={styles['main-container']}>
                    
                    <div className={styles['main-center']}>
                        
                        {messageListHtml}
                    </div>
                </div>
            </div>
        );
    }
}

react使用循環(huán)并實(shí)現(xiàn)刪除和修改

在React當(dāng)中如何使用for循環(huán)對(duì)當(dāng)前的數(shù)據(jù)進(jìn)行遍歷:

這4個(gè)組件是自己一個(gè)個(gè)寫進(jìn)來(lái)的,因該根據(jù)數(shù)據(jù)的多少遍歷出來(lái)對(duì)應(yīng)的一個(gè)結(jié)果:

例如:遍歷Persons時(shí)應(yīng)該給我們返回一個(gè)對(duì)應(yīng)的組件,而不是有一個(gè)寫一個(gè)

在React中遍歷需要使用正常的js語(yǔ)法(對(duì)應(yīng)的邏輯要寫在花括號(hào)里面)

解決此問題:添加key值屬性,key里面必須有獨(dú)一的標(biāo)識(shí)

這樣就給每一個(gè)元素標(biāo)出了key值;

既然現(xiàn)在有用了下標(biāo),就可以給當(dāng)前的組件添加對(duì)應(yīng)的事件,比如現(xiàn)在添加刪除的事件,點(diǎn)擊某一個(gè)東西可以刪除掉;

上述代碼需要調(diào)整的地方,因?yàn)樵赗eact當(dāng)中都在使用ES6的語(yǔ)法,ES6提供了一個(gè)操作運(yùn)算符,如果后期往數(shù)組里面添加?xùn)|西就會(huì)非常方便:

還有需要做的事情就是更改當(dāng)前組件的一個(gè)內(nèi)容:

組件

這之前給person的每個(gè)對(duì)象賦一個(gè)id屬性

總結(jié)

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

相關(guān)文章

  • react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁(yè)面展示

    react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁(yè)面展示

    這篇文章主要介紹了react-pdf實(shí)現(xiàn)將pdf文件轉(zhuǎn)為圖片,用于頁(yè)面展示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • react中的watch監(jiān)視屬性-useEffect介紹

    react中的watch監(jiān)視屬性-useEffect介紹

    這篇文章主要介紹了react中的watch監(jiān)視屬性-useEffect使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解如何在React函數(shù)式組件中使用MobX

    詳解如何在React函數(shù)式組件中使用MobX

    MobX 是一個(gè)簡(jiǎn)潔的狀態(tài)管理庫(kù),它通過透明的函數(shù)響應(yīng)式編程(TFRP)使得狀態(tài)管理變得簡(jiǎn)單和可擴(kuò)展,下面就跟隨小編一起來(lái)了解一下如何在React函數(shù)式組件中使用MobX吧
    2024-01-01
  • React Router 如何使用history跳轉(zhuǎn)的實(shí)現(xiàn)

    React Router 如何使用history跳轉(zhuǎn)的實(shí)現(xiàn)

    這篇文章主要介紹了React Router 如何使用history跳轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • react 跳轉(zhuǎn)后路由變了頁(yè)面沒刷新的解決方案

    react 跳轉(zhuǎn)后路由變了頁(yè)面沒刷新的解決方案

    最近在學(xué)習(xí)React的過程中遇到了路由跳轉(zhuǎn)后頁(yè)面不刷新的問題,本文就詳細(xì)的介紹一下解決方法,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • react封裝Dialog彈框的方法

    react封裝Dialog彈框的方法

    這篇文章主要為大家詳細(xì)介紹了react封裝Dialog彈框的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 使用React實(shí)現(xiàn)一個(gè)簡(jiǎn)單的待辦事項(xiàng)列表的示例代碼

    使用React實(shí)現(xiàn)一個(gè)簡(jiǎn)單的待辦事項(xiàng)列表的示例代碼

    這篇文章我們將詳細(xì)講解如何建立一個(gè)這樣簡(jiǎn)單的列表,文章通過代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-08-08
  • mobx在react hooks中的應(yīng)用方式

    mobx在react hooks中的應(yīng)用方式

    這篇文章主要介紹了mobx在react hooks中的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解React native fetch遇到的坑

    詳解React native fetch遇到的坑

    這篇文章主要介紹了詳解React native fetch遇到的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • React中useRef的具體使用

    React中useRef的具體使用

    這篇文章主要介紹了React中useRef的具體使用,它可以用來(lái)獲取組件實(shí)例對(duì)象或者是DOM對(duì)象,除此之外還有哪些用法,就一起來(lái)了解一下
    2021-04-04

最新評(píng)論

新晃| 奉节县| 资兴市| 临高县| 崇阳县| 江都市| 广南县| 平和县| 道孚县| 盘锦市| 桃江县| 博野县| 锡林浩特市| 莫力| 永和县| 项城市| 五家渠市| 洞头县| 上犹县| 桓台县| 美姑县| 泸水县| 三台县| 阿拉尔市| 东丽区| 睢宁县| 江西省| 张家港市| 郎溪县| 北票市| 涞水县| 台南县| 马龙县| 汝城县| 徐州市| 天长市| 五原县| 榆林市| 布拖县| 务川| 左贡县|