React 如何在 contentEditable 设置为 true 时聚焦 div?
React how to focus div when contentEditable is set to true?
我有一些反应代码如下(最小可重现示例):
import React, { useState } from 'react';
const Todo = ({todo}) => {
const [isUpdating, setisUpdating] = useState(false)
const updateItemHandler = (e) => {
setisUpdating(true);
}
return(
<div onClick={updateItemHandler} className={fa ${isUpdating ? "fa-check" : "fa-pencil"}`}></div>
<div id={todo.id}>
<div suppressContentEditableWarning={true}
contentEditable = {isUpdating}>{todo.value}
</div>
</div>
)
}
export default Todo;
当我点击 div 时,它确实将 contentEditable 更改为 true,但我也想同时关注新的可编辑 div。我尝试像这样修改我的 updateItemHandler 函数:
const updateItemHandler = (e) => {
setisUpdating(true);
e.focus();
}
但是 React 抛出一个 error/said 焦点不是这里的函数。
有什么方法可以在我将 contentEditable 更改为 true 时自动聚焦 div?
谢谢
你可以试试这个
import React, { useState, useRef } from 'react';
const Todo = ({todo}) => {
const ref = useRef(null)
const [isUpdating, setisUpdating] = useState(false)
const updateItemHandler = (e) => {
setisUpdating(true);
ref.current.focus()
}
return(
<div className="row text-center" id={todo.id}>
<div suppressContentEditableWarning={true}
contentEditable = {isUpdating} ref={ref}>{todo.value}
</div>
</div>
)
}
export default Todo;
使用ref(参考)可能对你有帮助
我有一些反应代码如下(最小可重现示例):
import React, { useState } from 'react';
const Todo = ({todo}) => {
const [isUpdating, setisUpdating] = useState(false)
const updateItemHandler = (e) => {
setisUpdating(true);
}
return(
<div onClick={updateItemHandler} className={fa ${isUpdating ? "fa-check" : "fa-pencil"}`}></div>
<div id={todo.id}>
<div suppressContentEditableWarning={true}
contentEditable = {isUpdating}>{todo.value}
</div>
</div>
)
}
export default Todo;
当我点击 div 时,它确实将 contentEditable 更改为 true,但我也想同时关注新的可编辑 div。我尝试像这样修改我的 updateItemHandler 函数:
const updateItemHandler = (e) => {
setisUpdating(true);
e.focus();
}
但是 React 抛出一个 error/said 焦点不是这里的函数。
有什么方法可以在我将 contentEditable 更改为 true 时自动聚焦 div?
谢谢
你可以试试这个
import React, { useState, useRef } from 'react';
const Todo = ({todo}) => {
const ref = useRef(null)
const [isUpdating, setisUpdating] = useState(false)
const updateItemHandler = (e) => {
setisUpdating(true);
ref.current.focus()
}
return(
<div className="row text-center" id={todo.id}>
<div suppressContentEditableWarning={true}
contentEditable = {isUpdating} ref={ref}>{todo.value}
</div>
</div>
)
}
export default Todo;
使用ref(参考)可能对你有帮助