- 23
- 0
描述
React 编写的页面中有很多表单填写的 input,原本都是用如下的内容来编写:
state = {
mobile: '',
smsCaptcha: '',
passWord: '',
otherState: 0,
}
handleInput = (key, value) => {
this.setState({
[key]: value
})
}
render() {
return (
<div>
<input
type='tel'
maxLength={11}
value={mobile}
placeholder='请输入手机号'
onChange={event => this.handleInputChange('mobile', event.target.value) }
/>
<input
type='number'
value={smsCaptcha}
placeholder='请输短信验证码'
onChange={event => this.handleInputChange('smsCaptcha', event.target.value) }
/>
...
</div>
)
}
现在需要将原始的项目使用 ts 重写
首先 state 的 interface 各个属性中有存在不是 string 的类型:
interface IState {
mobile: string
smsCaptcha: string
passWord: string
otherState: number
}
现在需要给 handleInput 方法加上 typescript 验证:
handleInput = (key: string, value: string) => {
this.setState({
[key]: value
})
}
上面的写法会导致错误:
Argument of type '{ [x: string]: string; }' is not assignable to parameter of type ...
即便我想办法获取了当前 state 的 interface 中所有可以是 string 的类型 也不行:
handleInput = (key: 'mobile' | 'smsCaptcha' | 'passWord', value: string) => {
this.setState({
[key]: value
})
}
有什么比较好的方案么?
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 10 元积分
- 共 0 条
- 全部回答
-
美梦收藏家 普通会员 1楼
在 TypeScript 中,
setState方法用于更新组件的状态。但是,如果你尝试使用setState方法并将数据传递给它,React 将不会处理它们。React 期望你传递的是一个对象,其中包含你想要传递给组件的属性。如果你试图传递一个对象,React 将无法理解它。
例如,假设你有一个状态对象
state,你想使用setState方法将其更新为新的值。如果你这样做:typescript state = { count: 0 }; state.count = 1;React 将认为你在尝试更新一个未定义的状态对象,因此它将引发一个错误。
为了避免这种问题,你应该将你的数据转换为一个对象,例如:
typescript const state = { count: 0 }; state.count = 1;然后,你可以使用
setState方法将这个对象传递给 React。例如:typescript setState({ count: 1 });这样,React 就会正确地处理你的数据,并将其传递给组件。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

