javascript - 理解 React 中 array.map() 范围的问题

标签 javascript reactjs scope

我已经完成了一个 array.map() 循环遍历 json 文件 (goods.json)。然后我想用它进行一些操作(例如,想在removeCard(obj)方法中从该数组中删除项目)。渲染没问题,但是问题是我不明白为什么我在removeCard(obj)方法中看不到shoppingCardsJSX数组,总是被低估。我已经在How to delete a ToDo Item onClick in React?中阅读了答案。和 Remove item from array in React但不幸的是我不明白它是如何工作的。你能帮我找出我做错了什么吗?希望这部分代码可以说明我的问题,

import { sample } from 'rxjs/internal/operators';
import React from 'react';
import ShoppingCard from './ShoppingCard';
import goods from './goods.json';

export default class ShoppingCards extends React.Component {
    constructor (props){
        super(props);
    }
    removeCard(obj){
        console.log("fireeeee");
        console.log(obj);
        console.log(this.shoppingCardsJSX);
    }
    render() {
        console.log("render");
        let shoppingCardsJSX = goods.map((good) => {
            return (
                <ShoppingCard
                    key = {good.id }
                    goodId = {good.id}
                    src = {good.src}
                    price = {good.price}
                    onRemoveCard={this.removeCard}
                />
            );
        });
        console.log(shoppingCardsJSX);
        return shoppingCardsJSX;
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

最佳答案

看起来您从未设置过 this.shoppingCardsJSX 并且您还应该使用 this.removeCard.bind(this) 而不是 this.removeCard code> 作为 prop,因为这样它就可以在调用时引用 this

import { sample } from 'rxjs/internal/operators';
import React from 'react';
import ShoppingCard from './ShoppingCard';
import goods from './goods.json';

export default class ShoppingCards extends React.Component {
    constructor (props){
        super(props);
    }
    removeCard(obj){
        console.log("fireeeee");
        console.log(obj);
        console.log(this.shoppingCardsJSX);
    }
    render() {
        console.log("render");
        this.shoppingCardsJSX = goods.map((good) => {
            return (
                <ShoppingCard
                    key = {good.id }
                    goodId = {good.id}
                    src = {good.src}
                    price = {good.price}
                    onRemoveCard={this.removeCard.bind(this)}
                />
            );
        });
        console.log(this.shoppingCardsJSX);
        return this.shoppingCardsJSX;
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

关于javascript - 理解 React 中 array.map() 范围的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52749759/

相关文章:

javascript - 从对象内部的函数获取作用域外的变量 - Javascript

javascript - 谷歌验证码过期时间

javascript - 带有两个函数调用的 onclick 需要两次点击才能运行两个函数 js

javascript - 当我使用 "await"创建函数的变量时,该函数立即运行还是仅在我调用该变量时运行?

java - 从 Try-Catch 中获取字符串

python - Python 中的变量范围和名称解析

javascript - Find() 函数返回未定义 - Mongoose 和 Node.js

javascript - 如何在javascript中找到最大数字?

javascript - 状态更改后 React 不会更新组件

javascript - react 路由器 : How to re-render the page when the user presses the back button