reactjs - 在 set()'ing Map 之后,返回的对象不是 Map
问题描述
我正在尝试为我的州迁移到 immutable.js:
class Register extends Component<{}, Map<string, string>> {
state = Map<string, string>();
onInputValueChange(e) {
const { name, value } = e.target;
const newState = this.state.set(name, value);
this.setState(newState);
}
render() {
...
<input onChange={this.onInputValueChange.bind(this)} placeholder="john.doe@example.com" name="email" type="email" />
}
}
因此,每当我第一次输入内容时,它都能正常工作。但是每当我输入第二个字母时,我都会TypeError: this.state.set is not a function
出错。如果我这样做Map.isMap(this.state)
,它会第一次返回 True,但之后每次都返回 False。
看到这个转载: http: //nixiedevelopment.club/register
解决方案
您不应该将整个状态设置为 Map,而是在您的状态中创建一个不可变变量:
class Register extends Component<{}, { data: Map<string, string> }> {
state = {data: Map<string, string>()};
onInputValueChange(e) {
const { name, value } = e.target;
this.setState(({ data }) => ({
data: data.set(name, value),
}));
}
...
}
请查看此wiki 页面以获取有关使用 Immutable 作为 React 状态的更多信息。
推荐阅读
- php - 将表单数据转换为 PDF 并将该 PDF 存储在服务器上
- github - 来自 RStudio 的 Git 提交错误:“系统找不到指定的路径”
- python - 检查子字符串是否存在于字符串中的特定位置
- javascript - 无法从客户端代码调用位于库中的服务器端函数
- java - Firebase 消息传递仅适用于单独的设备
- c++ - 编译时 Visual Studio 找不到 vcvars64.bat,即使它存在
- amazon-cognito - 如何建立从用户池到 aws appsync 模型的数据关系
- android - 我想在 Multipart 类中获取 SharedPreference 数据
- react-native - React Native 地图仅使用 apk 崩溃
- jquery - 占位符覆盖其他值 - 意外行为