javascript - 如何帮助流程处理 react 组件状态初始化器?

标签 javascript reactjs flowtype

我的 React 组件中正在进行这种初始化:

export default class LoginForm extends Component {
    state = {      // (*)
        flash: {
            message: null,
            style: null
        } // initialiser for flash message: show nothing
    }
    showError(error_message: string) {
        this.setState({
                flash: {
                    message: error_message,
                    style: "danger"
                })
        }

不幸的是,flow 将 state 对象的 flash 属性的初始化视为类型声明,并在后续的 setState() 中> 它将 flash 属性值的新声明标记为类型不匹配(“字符串与 null 不兼容”)。

我如何告诉 Flow 这里实际发生了什么,从而避免它报告错误?

<小时/>

(*) 注意:我最初错误地在这一行中使用了 : 而不是 = ...@DanPrince 纠正了这一点。

最佳答案

您是否想使用 class properties syntax相反?

export default class LoginForm extends Component {
  state = {
    flash: { message: null, style: null }
  }
}

据我所知,用 : 指定类属性现在不是、也从来不是有效的语法。在这种情况下,我想说 Flow 将其视为类型声明是预期的行为。

如果您想创建一个类属性为其提供类型签名,则需要结合使用这两种语法。

class LoginForm extends Component {
  state
    : { flash: { message: ?string, style: ?Object } }
    = { flash: { message: null, style: null } };
}

或者在一般情况下:

class {
  property:Type = Value;
}

关于javascript - 如何帮助流程处理 react 组件状态初始化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42465433/

相关文章:

javascript - react + 终极版 : How to update state when store is updated

javascript - react : How to inherit PropTypes?

javascript - 有使用 fetch 和 flowjs 的例子吗?

javascript - Webstorm + Flow + React : Unresolved variable or type $Keys

javascript - 使用 JavaScript 调整 Tumblr 博客上嵌入的视频大小

javascript - MomentJS 与 react 语言

javascript - 具有不同模态的图片

javascript - 是否可以在 Flow 中导入对象的推断类型?

javascript - Sticky div - 在某个点停止滚动

javascript - createTextNode 用不需要的引号包围我的选择列表