reactjs - 从同一功能设置禁用道具和焦点的问题
问题描述
我正在尝试构建编辑表单字段。在这里,您必须先按一个按钮,然后才能编辑表单域。但是,我在切换禁用的道具和设置元素的焦点时遇到了问题。这是一些示例代码。只有在我单击按钮两次后,输入才会聚焦。
export default function App() {
const [isDisabled, setIsDisabled] = useState(true);
const inputEl = useRef(null);
const onBlur = () => {
setIsDisabled(true);
};
const handleEditClick = () => {
setIsDisabled(false);
inputEl.current.focus();
};
return (
<div className="App">
<h1>Focus problem</h1>
<h2>Focus only happens on the scond click!</h2>
<input ref={inputEl} onBlur={onBlur} disabled={isDisabled} />
<button onClick={() => handleEditClick()}>Can edit</button>
</div>
);
}
这是一个代码沙箱
解决方案
在 DOM 元素上设置焦点是一个副作用,它应该在 useEffect 中完成:
import React, { useState, useRef, useEffect } from "react";
import "./styles.css";
export default function App() {
const [isDisabled, setIsDisabled] = useState(true);
const inputEl = useRef(null);
useEffect(() => {
inputEl.current.focus();
}, [isDisabled]);
const onBlur = () => {
setIsDisabled(true);
};
const handleEditClick = () => {
setIsDisabled(false);
};
return (
<div className="App">
<h1>Focus problem</h1>
<h2>Focus only happens on the scond click!</h2>
<input ref={inputEl} onBlur={onBlur} disabled={isDisabled} />
<button onClick={() => handleEditClick()}>Can edit</button>
</div>
);
}
推荐阅读
- git - 用 master 分支更新 gh-pages 分支
- gpu - CUDA GPU cudaMemcpy 从设备返回到主机非常慢
- python - 设置按字典顺序排列字符串和按升序排列整数
- java - Java Netty TCP 消息在通道读取时间歇性截断为 1420 字节
- javascript - 刷新页面时自动滚动(HTML、CSS、JS、JQuery)
- java - 用字符串替换 \
- azure - 当消息移动到死信队列(ASB DLQ)时如何发送邮件/警报?
- python - Codechef 问题给定整数 N 和 M,找到有序对 (a,b) 的数量,使得 1≤a
到目前为止,这就是我所做的一切,我正在尝试以更少的时间优化代码。但它不起作用。
for _ in range(int(input())): n, m = map(int, input().split()) count = 0
- postgresql - Golang Query 限制 1 没有 rows.next() 值
- spring-boot - 如何使用 thymeleaf 为 PDF 文件添加水印