javascript - 可以撤消另一个组件在文本字段中的状态更改吗?
问题描述
Material UI 中的受控 TextField 是否可以撤消另一个组件对其状态的更改?
在下面的示例中,单击“测试假事件”和“测试集状态”按钮会导致 TextField 中的更改无法通过默认浏览器“撤消”机制撤消。
import React from "react";
import TextField from "@material-ui/core/TextField";
export default function StateTextFields() {
const [name, setName] = React.useState("Cat in the Hat");
const handleChange = (event) => {
setName(event.target.value);
};
const ref = React.useRef(null);
const fakeEvent = (text, ref) => {
var e = new Event("input");
e.currentTarget = ref;
ref.value = text;
setName(text);
};
return (
<div>
<TextField
id="filled-name"
label="Name"
value={name}
onChange={handleChange}
variant="filled"
inputRef={ref}
/>
<button onClick={() => fakeEvent("test one", ref)}>
{" "}
test fake event
</button>
<button onClick={() => setName("test two")}> test set state</button>
</div>
);
}
https://codesandbox.io/s/material-demo-forked-685w8?file=/demo.js:105-120
有哪些选择?UseHistory 钩子https://usehooks.com/useHistory/?
解决方案
推荐阅读
- tfs - 如何使用 TFS 上的拉取请求标记构建?
- mongodb - 尝试从 mongo 集合中选择单个文档
- c# - 单击菜单项时使用代码隐藏功能
- javascript - Async/Await 仅在读取文件时是有效的异步函数
- node.js - 从 heroku CLI 或 github 构建错误。无法部署新内容
- css - 引导表标题颜色仅在单元格悬停时显示
- python - Eclipse PyDev 中自己的包上的 Python ImportError / ModuleNotFoundError
- php - Laravel bootstrap.js 传递一个 flash 消息
- c# - 无法使用 Console.ReadLine() 显示来自用户的输入
- php - PHP - symfony 中的条件