这是行不通的,因为Partial<IState>
返回的类型可以包含undefined
作为setState
不可接受的值。
interface IState {
bar: number
baz: boolean
}
class App extends React.Component<{}, IState> {
constructor(props) {
super(props)
this.state = {
bar: 123,
baz: false,
}
}
public render() {
return null
}
public update(options: Partial<IState>) {
this.setState(options)
}
public callUpdate() {
this.update({ bar: 4 })
}
}
我发现的唯一解决方案是将当前状态也添加到setState中:
this.setState({ ...this.state, ...options })
还有更好的方法吗?
打字稿版本:3.2.1
答案 0 :(得分:1)
您可能要使用类型声明:
NULL
不建议使用dlsym
,因为您必须解构当前状态对象,这是不必要的
答案 1 :(得分:0)
如果确定从未定义过选项,则可以在作为非null断言运算符的选项之后添加一个感叹号。
public update(options: Partial<IState>) {
this.setState(options!)
}
我想指出,使用this.setState({ ...this.state, ...options })
可能会导致数据丢失。因为this.state直到下一个渲染才会更新。如果要使用当前状态,则应改用this.setState(state => ({...state, ...options})
。