Make Flow自动检测来自mapDispatchToProps和mapStateToProps的道具

时间:2019-08-28 14:46:43

标签: redux flowtype

在开发本机应用程序时,我正在使用Flow提供一些类型安全性,而我使用redux。

这是我连接到redux存储的典型智能组件的示例:

import React, { Component } from 'react'

type Props = {
  user: User,
  updateUser: User => void,
}

type State = {}

default class SmartComponent extends Component<Props, State> {
  // My component methods
}

const mapStateToProps = (state, ownProps) => {
  return {
    ...ownProps,
    user: state.user
  }
}

const mapDispatchToProps = dispatch => {
  return {
    updateUser: (user: User) =>
      dispatch(updateUser(user)),
  }
}

export default connect(
  mapStateToProps,
  mapDispatchToProps,
)(SmartComponent)

这有效,但是流程不会强制我在Props中拥有的内容与在mapDispatchToPropsmapStateToProps中返回的内容之间的兼容性:如果我在{{1 }},但我忘了手动更新mapDispatchToProps,虽然Flow没有错误,但在运行时可能会出错。

是否有一种方法或最佳实践可以使流程自动了解Propsthis.propsmapDispatchToProps的内容,或者至少在它们不同时引发错误? / p>

1 个答案:

答案 0 :(得分:2)

这是一种方法:

我会在import time import numpy as np import pandas as pd from itertools import combinations from multiprocessing import Pool, Value, Lock, Array g = np.load('input.npy') c = Value('i', 0, lock=True) def count_valid_pairs(i): pair = g[:, i] global c if pair.max() > 100: with c.get_lock(): c.value += 1 return if __name__ == '__main__': t_start = time.time() cpus = 20 p = Pool(processes=cpus) r=p.imap_unordered(count_valid_pairs, combinations(range(g.shape[1]), 2)) p.close() p.join() print("Total {} pairs has max value > 100".format(c.value) mapStateToProps上返回类型,并为每个类型引入类型,然后将它们组合起来并作为道具传递给组件。

mapDispatchToProps

这样,流程将在某些内容丢失时提醒您。

这是Typescript的处理方式,因此我只是在流程中复制了类似的内容,语法可能有些不同。可能您的情况还需要将OwnProps与StateProps结合起来,在这种情况下,您需要在代码type CombinedProps = StateProps & DispatchProps; const mapStateToProps = (state, ownProps): StateProps const mapDispatchToProps = (dispatch):DispatchProps 中引入另一种类型,然后将其与OwnProps结合起来,但是想法是一样的,您结合/将它们相交并将其传递给下一个食用类型。

StateProps