在开发本机应用程序时,我正在使用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
中拥有的内容与在mapDispatchToProps
或mapStateToProps
中返回的内容之间的兼容性:如果我在{{1 }},但我忘了手动更新mapDispatchToProps
,虽然Flow没有错误,但在运行时可能会出错。
是否有一种方法或最佳实践可以使流程自动了解Props
和this.props
中mapDispatchToProps
的内容,或者至少在它们不同时引发错误? / p>
答案 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