当前位置: 首页 > 知识库问答 >
问题:

反应为循环

方航
2023-03-14

我正在学习JavaScript/React。我试图在react网站上为tic-tac-toe示例创建一个简单的for循环,但到目前为止,它一直存在问题。奇怪的是,有几个映射示例,但没有for循环示例。

无论如何,对于以下各项:

function Row(props){
  function renderSquare (i) {
    return <Square key={i} value={props.squares[i]} onClick={() => props.onClick(i)} />;
  }
  const columns = 3;
  let ss = [];
  for(var a = 0, i = props.counter * columns; a < 3; a++, i++){
    //Test Code
  }
  return (
    <div className="board-row">
      {ss}
    </div>
  );
}

当我替换"测试代码"时,这个工作

ss.push(renderSquare(i));

但这次失败了

ss.push(<Square key={i} value={props.squares[i]} onClick={() => props.onClick(i)}/>);

第二个选项失败,因为它没有创建“单独的”onClick元素。我怎样才能使失败的例子起作用?

更新#1

更新#2我按照@Matthias247的建议将var更改为let,现在它可以工作了:D

function Row(props){
  function renderSquare (i) {
    return <Square key={i} value={props.squares[i]} onClick={() => props.onClick(i)} />;
  }
  const columns = 3;
  let ss = [];
  for(let a = 0, i = props.counter * columns; a < columns; a++, i++){
    ss.push(<Square key={i} value={props.squares[i]} onClick={() => props.onClick(i)}/>);
    //ss.push(renderSquare(i));
    //console.log(i);
  }
  return (
    <div className="board-row">
      {ss}
    </div>
  );
}

共有1个答案

侯英达
2023-03-14

我认为问题在于将I捕获到元素中,然后单击onClick闭包。在for循环期间更改i,但最终所有插入的元素都是相同的-

要修复它,您需要为每个元素创建所有捕获值的唯一实例。这正是使用renderSquare方法所做的,该方法在函数体中创建i的一个新实例,该实例现在由元素捕获。

编辑:

使用let绑定(每次迭代创建一个新的变量实例)也可以:

for (let a = 0, i = props.counter; a < 3; a++, i++) {
    ss.push(<Square key={i} value={props.squares[i]} onClick={() => props.onClick(i)}/>);
}
 类似资料:
  • 我创建了一个需要在应用程序的多个部分中单独显示的组件-(在我的导航内部、主页和单独的路由上)。因此,我在此组件中的一个use中进行了所有操作调度(用于读取数据的api调用)效果: 如您所见,此效果应该只运行一次(当组件装载时)。 在其他任何地方,我都不会在此组件内部或外部调度这些特定操作。 该组件在3个位置渲染(导航内部、其自身的时间路径和主组件内部)。我可以在导航内部同时在时间上渲染它,没有问题

  • 我想播放一个音频声音一段时间。你是否可以确定循环音频的次数?在世博会上,我只看到一个声音的状态:islooping:true。这将循环的声音无休止,而不是一定量的时间!下面是关于声音状态和我播放声音的位置的代码

  • 有没有办法将字符串变量的值用作setState()的键? React会抛出上述语法错误,将arr[i]设置为变量最终会使用该变量的名称设置一个新状态。

  • 我试图了解钩子的功能,但是我似乎不太明白应该如何正确地使用函数。根据我对钩子规则的理解,我应该称它们为顶级的,而不是逻辑内的(比如循环)。这让我很困惑,我应该如何在从循环呈现的组件上实现。 请看下面的示例片段,其中我使用处理程序创建了5个按钮,该处理程序将按钮的编号打印到控制台。 现在,由于我在中使用了箭头函数,每次呈现示例时都会创建一个新的函数实例,我这样做是因为我希望函数知道是哪个按钮调用了它

  • 我有一个“fileUpload”组件,我正在将它传递到我的React应用程序的表单中。 我希望能够为for循环中的每个输入元素设置唯一的ref,然后将该ref传递给delete按钮以删除该文件。 FileUploadComponent FormComponent //在不使用FileUploadComponent和手动设置/传递ref的情况下工作 //尝试自动分配ref并将其传递给delete按钮

  • 问题内容: 我想使用reactjs文档中描述的reactjs中的标记。 我使用babel,因此我输入的标记如下: 不幸的是,导入语句不起作用。标记未定义。我必须如何导入此处标记的标记才能使用它? 问题答案: 下面是使用一种方法用: 确保已安装 包含在您的项目文件中: “dependencies”: { “react”: “^0.13.3”, “marked”: “^0.3.5” }, 导入您的 (