首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环中的父子组件事件处理程序

循环中的父子组件事件处理程序
EN

Stack Overflow用户
提问于 2019-05-22 14:47:27
回答 1查看 79关注 0票数 1

我创建了一个子组件和一个父组件,子组件从循环中调用,事件处理程序也从prop中调用,但是当我从子组件单击navlink时,每个单击事件都会被调用

如果调用第一个navlink,则只应调用第一个navlink的处理程序。

代码语言:javascript
复制
import { NavLink } from "react-router-dom";
import React, { Component } from "react";
import axios from "axios";
// import SearchComponent from "../Common/SearchComponent";
// import Navbar from "../Common/Navbar";
import { CompanyId } from "../../locales/global.json";
import CategoryComponent from "./CategoryComponent";

class CategoryPageComponent extends Component {
state = {
    Categories: []
};
componentDidMount() {
    if (this.state.Categories.length === 0) this.bindCategoryData();
}
onCategorySearch = e => {
    if (this.state.Categories.length === 0 && e === "")
    this.bindCategoryData(0);
};

bindCategoryData = () => {
    var $this = this;
    axios
    .post(
        "http://fstrumplifyml.azurewebsites.net/api/ApiCategory/GetCategories",
        {
        companyid: CompanyId,
        languageid: 1
        }
    )
    .then(function(response) {
        $this.setState({
        Categories: response.data.Data
        });
    });
};
UpdateSubCategories = (categories, categoryId) => {
    console.log(categories);
};
renderCategoryComponent = category => {
    return (
    <CategoryComponent
        Category={category}
        OnUpdateSubCategories={this.UpdateSubCategories.bind(this)}
    />
    );
};
render() {
    return (
    <React.Fragment>
        {/* <Navbar /> */}
        <section className="space--sm">
        <div className="container">
            {/* <SearchComponent onSearch={this.onCategorySearch} /> */}
            <div className="row">
            {this.state.Categories.map(this.renderCategoryComponent)}
            </div>
        </div>
        </section>
    </React.Fragment>
    );
}
}
export default CategoryPageComponent;
代码语言:javascript
复制
import React, { Component } from "react";
import { NavLink } from "react-router-dom";

class CategoryComponent extends Component {
  render() {
    return (
      <div className="masonry__item col-md-4 filter-computing">
        <div className="product">
          <NavLink
            to={this.props.OnUpdateSubCategories(
              this.props.Category.SubCategories,
              this.props.Category.CategoryId
            )}
          >
            <img
              alt={this.props.Category.CategoryName}
              className="ProductImage"
              src={this.props.Category.ImageUrl}
            />
          </NavLink>
          <NavLink
            className="block"
            to={this.props.OnUpdateSubCategories(
              this.props.Category.SubCategories,
              this.props.Category.CategoryId
            )}
          >
            <div>
              <h5>{this.props.Category.CategoryName}</h5>
            </div>
          </NavLink>
        </div>
      </div>
    );
  }
}

export default CategoryComponent;
EN

回答 1

Stack Overflow用户

发布于 2019-05-22 15:46:14

代码语言:javascript
复制
<NavLink      
  className="block"
  to={this.props.OnUpdateSubCategories(
     this.props.Category.SubCategories,
   this.props.Category.CategoryId
 )}
>

将函数调用放入props中时,每次render()运行时都会调用该函数

您可以在props中使用箭头函数

代码语言:javascript
复制
to={
()=>{this.props.OnUpdateSubCategories(
     this.props.Category.SubCategories,
   this.props.Category.CategoryId
 )}
}

但是在每次渲染中都会创建一个函数实例

因此,最好在CategoryComponent中创建一个函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56250833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档