フローでthis.state
をコードで使用しようとすると、次のエラーが表示されます。
オブジェクトリテラル:この型はundefinedと互換性がありません。識別子
State
の型パラメーターComponent
を宣言するのを忘れましたか?:
問題のコードは次のとおりです(ただし、他の場所でも発生します)。
class ExpandingCell extends Component {
constructor(props) {
super(props);
this.state = {
isExpanded: false
};
}
どんな助けも大歓迎です=)
状態プロパティを使用するには、状態プロパティのタイプを定義する必要があります。
class ComponentA extends Component {
state: {
isExpanded: Boolean
};
constructor(props) {
super(props);
this.state = {
isExpanded: false
};
}
}
flowを使用しており、コンポーネントのconstructor
にthis.state
を設定する場合:
1。this.state
のtype
を作成します
type State = { width: number, height: number }
2。そのtype
でコンポーネントを初期化します
export default class MyComponent extends Component<Props, State> { ... }
。これで、flowエラーなしでthis.state
を設定できます
constructor(props: any) {
super(props)
this.state = { width: 0, height: 0 }
}
以下は、onLayout
が呼び出されたときに、コンポーネントの幅と高さでthis.state
を更新するより完全な例です。
// @flow
import React, {Component} from 'react'
import {View} from 'react-native'
type Props = {
someNumber: number,
someBool: boolean,
someFxn: () => any,
}
type State = {
width: number,
height: number,
}
export default class MyComponent extends Component<Props, State> {
constructor(props: any) {
super(props)
this.state = {
width: 0,
height: 0,
}
}
render() {
const onLayout = (event) => {
const {x, y, width, height} = event.nativeEvent.layout
this.setState({
...this.state,
width: width,
width: height,
})
}
return (
<View style={styles.container} onLayout={onLayout}>
...
</View>
)
}
}
const styles = StyleSheet.create({
container: {
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
},
})
フロータイプ:any
の状態は無視できますが、これは推奨されません。あなたの状態がより大きく複雑になると、あなたは迷子になります。
class ExpandingCell extends Component {
state: any;
constructor(props) {
super(props);
this.state = {
isExpanded: false
};
}
}