我决定使用react-table
来构建网格。
要有更好的UI,只有一件事,那就是在单击AddNew按钮后,我想关注新项目的输入字段。
我打算使用ref
,但不知道如何fowardRef
子项
下面是我使用react表的示例:
https://codesandbox.io/s/beautiful-proskuriakova-lpfxn
在这种情况下,我希望在添加新行后关注字段First Name
。
更新:我可以通过使用本机HTML提供的autoFocus
支持来关注输入。
答案在这里
但我仍然希望通过使用React Ref
您正试图在功能组件上应用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。
我用了纯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得到任何错误。 提交表单本身的工作方式与实际输入字段的工作方式相同,当表单位于渲染的返回中或作为单独的组件导入时,而不是按照下面的编码方式。 为什么会这样? 主页组件 文本输入组件 提交按钮