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

React如何将Data.js内span标签的letter数据传递给RenderLetter组件

解决方案

你当前的写法无效是因为:sendLetter 是你给原生<span>标签加的自定义属性,不会自动传递给同级的RenderLetter组件,你需要通过React组件的props机制传递对应数据,分两种常见场景处理:


场景1:需要将所有span对应的letter全部传给RenderLetter

直接把拆分后的字符数组作为props传递即可,修改后的代码如下:

Data.js 修改后代码
import { useState, useEffect } from "react";
import RenderLetter from "./RenderLetter";

function Data({ randomData, getInput }) {
  const [dummyData, setDummyData] = useState(null);
  // 提前拆分字符,统一复用
  const letterList = dummyData ? dummyData.split("") : [];

  return (
    <div>
      {dummyData ? (
        <div>
          {letterList.map((letter, i) => {
            let color;
            if (i < getInput.length) {
              color = letter === getInput[i] ? "green" : "red";
            }
            return (
              <span key={i} style={{ background: color }}>
                {letter}
              </span>
            );
          })}
          {/* 把全部letter数组传给RenderLetter */}
          <RenderLetter sendInput={getInput} sendLetter={letterList} />
        </div>
      ) : (
        <div>Loading</div>
      )}
    </div>
  );
}

export default Data;

此时RenderLetter里拿到的sendLetter就是所有字符组成的数组,可以直接和sendInput搭配做逻辑处理。


场景2:点击对应span时,传递当前选中的单个letter给RenderLetter

需要新增state存储选中的letter,给span绑定点击事件赋值:

Data.js 修改后代码
import { useState, useEffect } from "react";
import RenderLetter from "./RenderLetter";

function Data({ randomData, getInput }) {
  const [dummyData, setDummyData] = useState(null);
  // 新增state存储选中的letter
  const [selectedLetter, setSelectedLetter] = useState(null);

  return (
    <div>
      {dummyData ? (
        <div>
          {dummyData.split("").map((letter, i) => {
            let color;
            if (i < getInput.length) {
              color = letter === getInput[i] ? "green" : "red";
            }
            return (
              <span 
                key={i} 
                style={{ background: color, cursor: 'pointer' }}
                // 点击时把当前letter存入state
                onClick={() => setSelectedLetter(letter)}
              >
                {letter}
              </span>
            );
          })}
          {/* 把选中的单个letter传给RenderLetter */}
          <RenderLetter sendInput={getInput} sendLetter={selectedLetter} />
        </div>
      ) : (
        <div>Loading</div>
      )}
    </div>
  );
}

export default Data;

此时点击任意span,RenderLetter里的sendLetter就会更新为你点击的对应字符。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:30:01