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

React>如何使用react-table在添加新行后设置输入字段的焦点

狄易安
2023-03-14

我决定使用react-table来构建网格。

要有更好的UI,只有一件事,那就是在单击AddNew按钮后,我想关注新项目的输入字段。

我打算使用ref,但不知道如何fowardRef子项

下面是我使用react表的示例:

https://codesandbox.io/s/beautiful-proskuriakova-lpfxn

在这种情况下,我希望在添加新行后关注字段First Name

更新:我可以通过使用本机HTML提供的autoFocus支持来关注输入。

答案在这里

但我仍然希望通过使用React Ref

共有2个答案

丁善
2023-03-14

您正试图在功能组件上应用forwardRef(),并作出响应

不能在函数组件上使用ref属性React ref doc

您可以使用useimprativehandle(),它可以:;

const Table = React.forwardRef((props, ref) => {
  const inputRef = React.useRef();
  React.useImperativeHandle(ref, () => ({
    focus: () => {
      inputRef.current.focus();
    }
  }), []);
  return <Editable ref={inputRef} {...props} />;
}

现在您可以通过创建ref来访问ref,并调用命令式的方法。我没有研究如何集中元素,但您可以使用命令式handle处理forwardRef问题。

您可以将EditTable组件转换为基于分类的comp。

商瀚
2023-03-14

我用了纯JavaScript来实现你的目标

  const setFocus = () => {
    //Add id to the table
    document.getElementsByTagName("TABLE")[0].setAttribute("id", "mytable");

    //table > tbody > tr (latest added row) > td (first cell in the row) > input
    let cell = document.getElementById("mytable").lastElementChild
      .lastElementChild.firstElementChild.children[0];

    cell.focus();
  };

  const addNew = () => {
    setData(old => [...old, {}]);
    window.requestAnimationFrame(setFocus);
  };

我使用请求动画框架,因为我正在操作DOM,查看此答案以了解更多详细信息。

 类似资料:
  • 问题内容: 呈现组件后,将焦点设置在特定文本字段上的反应是什么? 文档似乎建议使用引用,例如: 在渲染函数中的输入字段上进行设置,然后调用: 但是我应该在哪里称呼它?我已经尝试了几个地方,但无法正常工作。 问题答案: 您应该这样做,而不是。像这样

  • JSX: 笔记: 输入字段是一个class 当ButtonOnClick处理程序运行时,电子邮件输入字段应该获得焦点,但它没有发生。我发现react引导输入字段类正在包装div中呈现真实的DOM输入字段。这是控制台的输出。日志: 因此,看起来输入没有获得焦点,因为焦点应用于包装div,而包装div拒绝了它(我在控制台中使用进行检查)。 问题是,如何关注真正的元素? 注意:有点不相关,但React尊

  • 问题内容: 我正在尝试提供一组可以重复或删除的输入。 我发现并使用了以下方法的组合:https : //jsfiddle.net/69z2wepo/36745/ 并且(因为上面的代码无法处理删除操作):https : //codepen.io/lichin-lin/pen/ MKMezg 我可能不需要指向一个特定的输入,因为在我的界面中,您应该始终只添加一个新的(如果之前的一个已填充)(我将在稍后

  • 问题内容: 数据加载后是否可以通过控制器设置输入字段的焦点(在这种情况下,通过$ resource)? 通过ng-show隐藏输入,直到从API返回数据为止,但是我找不到将焦点设置在输入上的方法。我知道输入的ng- model名称,以及输入名称,这意味着我可以通过jQuery来做到这一点,但我宁愿使用AngularJS方式来做到这一点。 我在这里尝试了很多指令示例,但是它们似乎都集中在1.2 ng

  • 问题内容: 我正在尝试使用React refs在安装时聚焦Redux-Form字段。 当我尝试时,会抛出一个错误: 当我console.log this.refs时,它通常是一个空对象,有时将’title’标识为ref,但它不是可靠的。 我是否正确使用了引用?我的代码在下面供参考。 … 问题答案: 请尝试使用回调函数设置ref: 然后使用它来获取基础的DOM节点: DOM输入元素是否包装在另一个元

  • 在我下面的组件中,输入字段在键入字符后失去焦点。当使用Chrome的Inspector时,看起来整个表单都在重新呈现,而不仅仅是输入字段的value属性。 我没有从eslint或Chrome Inspector得到任何错误。 提交表单本身的工作方式与实际输入字段的工作方式相同,当表单位于渲染的返回中或作为单独的组件导入时,而不是按照下面的编码方式。 为什么会这样? 主页组件 文本输入组件 提交按钮