You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何执行组件函数?新手求助makeGrid函数执行无效果问题

问题分析与解决方案

嘿,刚接触React的话确实容易踩这些坑,我来帮你一步步梳理问题所在,然后修复代码:

首先看你代码里的几个核心问题:


1. Render方法的语法错误

你的render()方法里,{this.makeGrid}写在了return()的外面,而且就算放对位置,也只是引用了函数,没有调用它(应该是this.makeGrid())。React只会执行return()里的JSX,外面的代码根本不会被执行,这也是为什么你的函数完全没触发的原因。

2. React中不要用jQuery直接操作DOM

React的核心是用状态(state)和JSX来管理UI,直接用jQuery的$('.boxes').append()会绕开React的DOM diff机制,不仅容易出问题,也违背了React的设计理念。

3. 多余的$(document).ready

在React组件里,组件的生命周期方法已经能保证DOM渲染完成后再执行代码,不需要依赖jQuery的ready事件。


修复后的完整代码

我把你的代码改成了符合React规范的写法,用状态管理数据,直接返回JSX来生成网格:

import React, { Component } from 'react';
import './Grid.css';
import test from "../product.json";

class Grid extends Component {
  // 初始化状态,存储产品数据
  state = {
    products: test
  };

  // 生成网格的方法,返回JSX元素
  makeGrid = () => {
    console.log("函数执行了!");
    // 遍历产品数据,生成对应的box元素
    return this.state.products.map((product, index) => (
      <div key={index} className="boxi">
        <p>名称:{product.name}</p>
        <p>价格:{product.price}</p>
      </div>
    ));
  };

  render() {
    return (
      <div className="Grid">
        <section className="boxes">
          {/* 调用makeGrid方法,渲染生成的网格 */}
          {this.makeGrid()}
        </section>
      </div>
    );
  }
}

export default Grid;

关键修改点说明

  • 移除了jQuery依赖:完全用React的方式生成UI,不需要再手动操作DOM。
  • 把makeGrid改成返回JSX的函数:这样在render里调用它时,React会把返回的元素直接渲染到页面上。
  • 修复了render的语法错误:把函数调用放在了return()内部的正确位置。
  • 添加了key属性:遍历生成元素时必须给每个元素唯一的key,这是React的要求,能提升渲染性能。
  • 移除了多余的$(document).ready:React组件的render方法执行时,DOM已经准备好可以渲染了。

如果你的product.json格式是类似[{name: "产品1", price: 100}, ...]的数组,这个代码应该就能正常工作,控制台也会输出"函数执行了!",页面上也会显示每个产品的名称和价格。

内容的提问来源于stack exchange,提问作者Mrabet Iheb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:14:44