当前位置: 首页 > 面试题库 >

如何将引用分配给多个组件

陆信瑞
2023-03-14
问题内容

我正在使用React使用渲染多个数据array.map
如何禁用列表中的单击按钮?

这是我的代码:

  onRunClick(act, e) {
    this.refs.btn.setAttribute("disabled", true);
  }

  render () {
    return (
      <div>
        {
          this.state.acts.map((act) => {
            let boundActRunClick = this.onRunClick.bind(this, act);

            return (
              <p key={act._id}>
                Name: {act.name}, URL(s): {act.urls}
                <button ref='btn' onClick={boundActRunClick}>Run</button>
              </p>
            )
          })
        }
      </div>
    );
  }
}

使用refs不起作用…我认为我无法添加状态,因为有多个按钮。


问题答案:

您应该使用ref callback而不是ref,并且是的,您需要多个ref,一个数组应该很好

根据文档:

React支持可以附加到任何组件的特殊属性。ref属性具有一个callback功能,并且在 callback安装或卸载组件后立即执行。

在HTML元素上使用ref属性时,会ref callback 接收基础DOM元素作为其参数。

ref callbacks之前被调用componentDidMountcomponentDidUpdate生命周期钩。

仅使用ref回调在类上设置属性是访问DOM元素的常见模式。首选方法是像上面的示例一样在ref回调中设置属性。甚至有一种更短的编写方法:ref={input => this.textInput = input}.

字符串引用是旧版,并且根据 docs

旧版API:字符串引用

如果您以前使用过React,那么您可能会熟悉一个较旧的API,其中ref属性是一个字符串,例如“
textInput”,并且DOM节点的访问方式是this.refs.textInput。我们不建议这样做,因为字符串引用存在一些问题,被认为是旧问题,并且很可能会在将来的发行版中删除。如果您当前正在使用this.refs.textInputaccess
refs,我们建议改用回调模式。

constructor() {
    super();
    this.btn = [];
}
onRunClick(act, index, e) {
    this.btn[index].setAttribute("disabled", true);
  }

  render () {
    return (
      <div>
        {
          this.state.acts.map((act, index) => {
            let boundActRunClick = this.onRunClick.bind(this, act, index);

            return (
              <p key={act._id}>
                Name: {act.name}, URL(s): {act.urls}
                <button ref={(ref) => this.btn[index] = ref} onClick={boundActRunClick}>Run</button>
              </p>
            )
          })
        }
      </div>
    );
  }


 类似资料:
  • 我想将引用分配给变量p: 这样我就可以像这样使用它: 表达式[1]产生编译错误,如何解决? 线程"main"中的异常java.lang.错误:未解决的编译问题: PrintStream类型中的println(Object)类型为void,这与描述符的返回类型void不兼容 如果将更改为,则错误变为: 线程“main”java中出现异常。lang.错误:未解决的编译问题:语法错误,插入“维度”以完成

  • 我在运行时通过“for循环”动态创建一个JTextFields数组。 我使用相同或等效的“for循环”将DocumentListener添加到每个文件中。在用户编辑这些JTextField的内容之后,应该执行的代码似乎是为每个JTextField/DocumentListener分别定义的。 问题:这不起作用,因为在用户操作之后执行的代码处于上一轮“for循环”结束时最后一次看到的状态。

  • 我尝试用以下方法调用三个引用游标参数: 但是listOfObjects只包含cursor1的内容,无法获得cursor2的内容。

  • 我有一个numpy数组,一个定义数组中范围的开始/结束索引列表,以及一个值列表,其中值的数量与范围的数量相同。在循环中执行此赋值当前非常慢,因此我想以矢量化的方式将值赋给数组中的相应范围。这可能吗? 这是一个具体的简化示例: <代码>a=np。零([10]) 下面是定义a中范围的开始索引和结束索引列表,如下所示: 这是我想分配给每个范围的值列表: <代码>值=[1、2、3、4] 我有两个问题。首先

  • 以前,我从android的文件夹中读取了一个json文件, 但是现在为null。请纠正我 错误日志是,

  • 问题内容: 在Python中,我们可以将函数分配给变量。例如,math.sine函数: 有没有简单的方法可以将多个函数(即一个函数的一个函数)分配给一个变量?例如: 问题答案: 我认为作者想要的是某种形式的功能链。通常,这很困难,但是对于 接受一个论点 返回一个值, 列表中上一个函数的返回值与列表中下一个函数的输入类型具有相同的返回值 我们说有一个需要链接的函数列表,其中有一个参数,然后返回一个参