最後に、flexGrow
、flexShrink
、およびflexBasis
の導入とflex
のレンダリング方法の変更(または修正)を含む、react nativeを0.42にアップグレードしました。
次のようなエラーが発生し続けます:
ビューは、明示的に幅/高さを設定してレンダリングされましたが、flexBasisは0です。 (これはflex:をflexGrow:に変更することで修正できます)ビュー:
誰かがflex: 1
とflexGrow: 1
の違いを説明できますか。ビューにどちらか一方を適用すると、異なることをするように見えますが、同じことをするべきではありませんか?
考慮すべきテストコードを次に示します。
render() {
return <View style={{flex: 1,backgroundColor: "cornflowerblue"}}>
<View style={{backgroundColor: "chartreuse"}}><Text>Nothing (17px)</Text></View>
<View style={{flex: 0, backgroundColor: "yellow"}}><Text>flex: 0 (17px)</Text></View>
<View style={{flex: 0, flexBasis: 10, backgroundColor: "brown"}}><Text>flex: 0, flexBasis: 10 (10px)</Text></View>
<View style={{flex: 0, flexGrow: 1, backgroundColor: "orange"}}><Text>flex: 0, flexGrow: 1 (97px)</Text></View>
<View style={{flex: 0, flexShrink: 1, backgroundColor: "tan"}}><Text>flex: 0, flexShrink: 1 (17px)</Text></View>
<View style={{flex: 0, flexGrow: 1, flexBasis: 10, backgroundColor: "purple"}}><Text>flex: 0, flexGrow: 1, flexBasis: 10 (90px)</Text></View>
<View style={{flex: 0, flexShrink: 1, flexBasis: 10, backgroundColor: "gray"}}><Text>flex: 0, flexShrink: 1, flexBasis: 10 (10px with 7px hidden below the next element)</Text></View>
<View style={{flex: 1, backgroundColor: "blue"}}><Text>flex: 1 (80px)</Text></View>
<View style={{flex: 1, flexBasis: 10, backgroundColor: "cornsilk"}}><Text>flex: 1, flexBasis: 10 (90px)</Text></View>
<View style={{flex: 1, flexGrow: 1, backgroundColor: "red"}}><Text>flex: 1, flexGrow: 1 (80px)</Text></View>
<View style={{flex: 1, flexShrink: 1, backgroundColor: "green"}}><Text>flex: 1, flexShrink: 1 (80px)</Text></View>
<View style={{flex: 1, flexGrow: 1, flexBasis: 10, backgroundColor: "aqua"}}><Text>flex: 1, flexGrow: 1, flexBasis: 10 (90px)</Text></View>
<View style={{flex: 1, flexShrink: 1, flexBasis: 10, backgroundColor: "pink"}}><Text>flex: 1, flexShrink: 1, flexBasis: 10 (90px)</Text></View>
</View>;
}
上記のコードのスクリーンショットは次のとおりです。
width
およびheight
を追加しました:
render() {
return <View style={{flex: 1,backgroundColor: "cornflowerblue"}}>
<View style={{flex: 0, backgroundColor: "orange"}}><Text>flex: 0 (17px)</Text></View>
<View style={{flex: 0, width: 700, height: 20, backgroundColor: "yellow"}}><Text>flex: 0, width: 700, height: 20 (20px)</Text></View>
<View style={{flex: 0, flexBasis: 10, width: 700, height: 20, backgroundColor: "brown"}}><Text>flex: 0, flexBasis: 10, width: 700, height: 20 (10px with 7px hidden below the next element)</Text></View>
<View style={{flex: 0, flexGrow: 1, width: 700, height: 20, backgroundColor: "orange"}}><Text>flex: 0, flexGrow: 1, width: 700, height: 20 (90px)</Text></View>
<View style={{flex: 0, flexShrink: 1, width: 700, height: 20, backgroundColor: "tan"}}><Text>flex: 0, flexShrink: 1, width: 700, height: 20 (20px)</Text></View>
<View style={{flex: 0, flexGrow: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "purple"}}><Text>flex: 0, flexGrow: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
<View style={{flex: 0, flexShrink: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "gray"}}><Text>flex: 0, flexShrink: 1, flexBasis: 10, width: 700, height: 20 (10px with 7px hidden below the next element)</Text></View>
<View style={{flex: 1, backgroundColor: "orange"}}><Text>flex: 1 (70px)</Text></View>
<View style={{flex: 1, width: 700, height: 20, backgroundColor: "blue"}}><Text>flex: 1, width: 700, height: 20 (70px)</Text></View>
<View style={{flex: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "cornsilk"}}><Text>flex: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
<View style={{flex: 1, flexGrow: 1, width: 700, height: 20, backgroundColor: "red"}}><Text>flex: 1, flexGrow: 1, width: 700, height: 20 (70px)</Text></View>
<View style={{flex: 1, flexShrink: 1, width: 700, height: 20, backgroundColor: "green"}}><Text>flex: 1, flexShrink: 1, width: 700, height: 20 (70px)</Text></View>
<View style={{flex: 1, flexGrow: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "aqua"}}><Text>flex: 1, flexGrow: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
<View style={{flex: 1, flexShrink: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "pink"}}><Text>flex: 1, flexShrink: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
</View>;
}
上記のコードのスクリーンショットは次のとおりです。
flex: 0
(デフォルト)flex: 0
width
およびheight
の小道具を設定することでサイズを設定する必要がありますが、設定されていない場合はコンテンツに収まるようです。flex: 0, flexBasis: {{px}}
flexBasis
で指定されたサイズを取りますflex: 0, flexGrow: 1
flex: 0
およびflexGrow: 1
;を使用これは、コンテンツのサイズ(上記の例では)をflex: 1
に設定されている要素のサイズに追加するのと同じです。コンテンツのサイズを追加するピクセル数を追加する代わりに、flex: 1, flexBasis: 10
に似ています。flex: 0, flexShrink: 1
flex: 0
とflexShrink: 1
を使用すると、要素はコンテンツのサイズを取るように見えます。つまり、単にflex: 0
と同じです。コンテンツよりも大きくなる状況があるとは思いますが、まだ見ていません。flex: 0, flexGrow: 1, flexBasis: {{px}}
flex: 0, flexGrow: 1
と同じですが、コンテンツサイズをflex: 1
要素に追加する代わりに、指定されたピクセル数を追加する点が異なります。flex: 0, flexShrink: 1, flexBasis: {{px}}
flex: 0, flexBasis: {{px}}
と同じです。flex: 0, height: {{px}}
flex: 0
では、height
はflexBasis
と同様に扱われます。 height
とflexBasis
の両方が設定されている場合、height
は無視されます。flex: 1
flex: 1
flex: 1, flexBasis: {{px}}
flex: 1
およびflexBasis: {{px}}
;を使用flexBasis
の値が要素のサイズに追加されます。つまり、flex: 1
要素を取り、flexBasis
で設定されたピクセル数を追加するようなものです。したがって、flex: 1
要素が50pxで、flexBasis: 20
を追加すると、要素は70pxになります。flex: 1, flexGrow: 1
flex: 1, flexShrink: 1
flex: 1, flexGrow: 1, flexBasis: {{px}}
flexGrow
は無視されるため、これはflex: 1, flexBasis: {{px}}
と同じです。flex: 1, flexShrink: 1, flexBasis: {{px}}
flexShrink
は無視されるため、これはflex: 1, flexBasis: {{px}}
と同じです。flex: 1, height: {{px}}
flex: 1
では、height
は無視されます。代わりにflexBasis
を使用してください。flex: 1
に注意してください。これがないと、すべての子が期待どおりに表示されません。Hot Reloading
を使用しないでください。数回リロードした後、要素を誤って表示する可能性があります。 Live Reload
を有効にするか、 command + r (たくさん)。flex: 0
です。フレックススタイルの値を追加しない場合、デフォルトで0になります。width
は、他のflexプロパティに関係なく、常にflexDirection: "column"
で考慮されるようです。 flexDirection: "row"
を使用したheight
についても同様です。flexBasis
はheight
に勝るので、flexBasis
よりもheight
を使用します。