【问题标题】:React functional component not updating when pushing data to array将数据推送到数组时反应功能组件不更新
【发布时间】:2019-10-03 00:04:54
【问题描述】:

我有这个功能组件在将数据推送到数组时不会更新:

const Experience = (props) => {
    let experience = [{
        from:"", 
        to:"",
        employer_name:"",
        employer_number:""
    }];

    function addExperience() {
        experience = [...experience, {
            from:"", 
            to:"",
            employer_name:"",
            employer_number:"",
        }];
    }

    return (
        <>
            {experience.map((val, idx) => {
                let id = `exp-id-${idx}`

                return(
                    <div key={idx} id={id}>
                        ...
                    </div>
                )
            })}
            <button onClick={addExperience}>Add experience</button>
        </>
    )
}

当点击添加体验时,映射没有更新,有什么帮助吗?

【问题讨论】:

  • 您需要在状态中存储experience 。为此,您可以使用 useState 挂钩或将其设为类组件并使用 this.state = {}

标签: reactjs components react-component


【解决方案1】:

虽然您正在更新变量,但组件本身并没有重新渲染。功能组件会在其中一个 props 更新时触发渲染。

为了获得所需的行为,您必须使用状态,或者通过useState 钩子或通过使用具有状态的类组件。

带有 React Hooks 的功能组件

import React, { useState } from 'react';

const Experience = (props) => {
    const [experience, setExperience] = useState([{
        from:"", 
        to:"",
        employer_name:"",
        employer_number:""
    }]);

    function addExperience() {
        setExperience([...experience, {
            from:"", 
            to:"",
            employer_name:"",
            employer_number:"",
        }]);
    }

    return (
        <>
            {experience.map((val, idx) => {
                let id = `exp-id-${idx}`

                return(
                    <div key={idx} id={id}>
                        ...
                    </div>
                )
            })}
            <button onClick={addExperience}>Add experience</button>
        </>
    )
}

类组件

import React, { Component } from 'react'

class Experience extends Component {
    state = {
        experience: [{
            from:"", 
            to:"",
            employer_name:"",
            employer_number:""
        }]
    };

    function addExperience() {
        this.setState([...this.state.experience, {
            from:"", 
            to:"",
            employer_name:"",
            employer_number:"",
        }]);
    }

    return (
        <>
            {this.state.experience.map((val, idx) => {
                let id = `exp-id-${idx}`

                return(
                    <div key={idx} id={id}>
                        ...
                    </div>
                )
            })}
            <button onClick={this.addExperience}>Add experience</button>
        </>
    )
}

【讨论】:

猜你喜欢
  • 2020-05-22
  • 2021-01-04
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 2023-02-16
  • 2018-03-13
  • 2022-01-16
相关资源
最近更新 更多