视图不以给定大小呈现

View not rendering with given size

我在使用 expo 的 react-native 时遇到了一个奇怪的问题,正如你在图像上看到的那样,一些渲染元素没有我给它们的宽度和高度,而是一个介于两者之间的随机数(多一点或少一点)。当你有一个简单的列表时这没什么大不了的,但是当你必须显示一个嵌套数组时(见图像),你可能会有奇怪和不需要的空间,你可以清楚地看到边框存在问题。

(全新的空白 expo 项目版本 3.22.3,下面的代码可按预期使用 React Native Web,因此您无法使用 codesandbox 进行重现)

Simple Image

import React from 'react'
import { StyleSheet, View } from 'react-native'

export default function App() {
    const array = [1, 1, 1, 1, 1, 1, 1, 1, 1]

    return (
        <View style={styles.container}>
            {array.map(() => (
                <View style={styles.row} key={Math.random()}></View>
            ))}
        </View>
    )
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center'
    },
    row: {
        borderWidth: 0.5,
        backgroundColor: 'red',
        width: 30,
        height: 30
    }
})

Nested Image

import React from 'react'
import { StyleSheet, View } from 'react-native'

export default function App() {
    const array = [
        [1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1]
    ]

    return (
        <View style={styles.container}>
            {array.map((row) => (
                <View style={styles.row} key={Math.random()}>
                    {row.map(() => (
                        <View style={styles.column} key={Math.random()}></View>
                    ))}
                </View>
            ))}
        </View>
    )
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center'
    },
    row: {
        flexDirection: 'row'
    },
    column: {
        borderWidth: 0.5,
        backgroundColor: 'red',
        width: 33,
        height: 33
    }
})

所以如果你有任何想法..谢谢!

屏幕截图显示了来自 ExpoRoot 的样式。您需要查看属性 View。 一切都正确显示。呈现的元素具有您指定的宽度和高度。

对于第二个问题,我认为这只是在Android模拟器上。如果您在真实设备上构建或测试,应该没问题。

您可以使用 codesandbox 创建一个 react-native 项目并测试代码。