将 <Image> 和 <TouchableHighlight> 放入 <View> 时,“React.Children.only 期望收到单个 React 元素子项”错误

IT技术 javascript node.js reactjs react-native
2021-04-24 02:06:02

我的 React Native 代码中有以下渲染方法:

render() {
    const {height, width} = Dimensions.get('window');
    return (
      <View style={styles.container}>
        <Image 
          style={{
            height:height,
            width:width,
          }}
          source={require('image!foo')}
          resizeMode='cover' 
        />
        <TouchableHighlight style={styles.button}/>
      </View>
    );
  }

它给了我这个错误:

React.Children.only 预计会收到一个 React 元素子元素

如果我删除TouchableHighlight组件,它工作正常。如果我删除 Image 组件,它仍然会出现该错误。

我不明白为什么它会给我这个错误。<View>应该能够在其中包含多个组件进行渲染。

4个回答

看来<TouchableHighlight>只能生一个孩子了。文档说它只支持一个孩子,并且一个以上必须包含在 a 中<View>,但并不是说它必须至少(和大多数)一个孩子。我只是想要一个没有文本/图像的纯色按钮,所以我认为没有必要添加一个孩子。

我会尝试更新文档以表明这一点。

<TouchableHighlight>元素是错误的来源。<TouchableHighlight>元素必须有一个子元素

尝试像这样运行代码:

render() {
    const {height, width} = Dimensions.get('window');
    return (
        <View style={styles.container}>
            <Image 
                style={{
                    height:height,
                    width:width,
                }}
                source={require('image!foo')}
                resizeMode='cover' 
            />
            <TouchableHighlight style={styles.button}>
                <Text> This text is the target to be highlighted </Text>
            </TouchableHighlight>
        </View>
    );
}

是的,您确实需要在您的<TouchableHighlight>.

而且,如果你不想污染你的文件,Views你可以使用 React Fragments来达到同样的目的。

<TouchableWithoutFeedback>
  <React.Fragment>
   ...
  </React.Fragment>
</TouchableWithoutFeedback>

或者更好的是React Fragments有一个简短的语法所以上面的代码可以写成如下:

<TouchableWithoutFeedback>
  <>
   ...
  </>
</TouchableWithoutFeedback>

我有同样的错误,即使我在TouchableHighlight. 问题是我有一些其他人注释掉但不正确。确保您正确注释掉:http : //wesbos.com/react-jsx-comments/