[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?

Posted 前端小歌谣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?相关的知识,希望对你有一定的参考价值。

使用immutable对象

import React from 'react';

class PComponent extends React.PureComponent {
    render() {
        const { name, age } = this.props.person;
        return <>
            <p>NAME: {name}</p>
            <p>AGE: {age}</p>
        </>
    }
}

class Demo extends React.Component {
    state = {
        person: {
            name: 'vk',
            age: 1,
        }
    }
    doChange = () => {
        const { person } = this.state;
        // 这种情况下,person的引用地址没有变化,diff前后浅比较相等,所以并没有引起PComponent变化
        // 如果PComponent是继承自React.Component,因为父组件的render导致了子组件也render了,是会产生变化的
        // person.name = 'vk2';
        // this.setState({ person })
        // 正确的写法
        this.setState({
            person: {
                ...person,
                name: 'vk2',
            }
        });
    }
    render() {
        const { person } = this.state;
        return <>
            <button onClick={this.doChange}>Change</button>
            <PComponent person={person} />
        </>
    }
}

export default Demo;

   个人简介

我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,
但坚持一定很酷。欢迎大家一起讨论



主目录

与歌谣一起通关前端面试题

以上是关于[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?的主要内容,如果未能解决你的问题,请参考以下文章

[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?

如何使用 Typescript 在 React 中定义 <video> 引用的类型?

如何在 React 中引用标准 HTML 元素类型? [复制]

如何从函数中访问父变量

如何解决 Hooks 上的这个 React 类型错误?

react初始化阶段