【问题标题】:How to solve Invarient violation:Text strings must be rendered within a <Text> component in React Native?如何解决不变冲突:文本字符串必须在 React Native 中的 <Text> 组件内呈现?
【发布时间】:2019-07-26 09:17:10
【问题描述】:

在我的 React-Native 项目中,我安装了以下版本的 react-navigation:

npm install react-navigation@^1.0.0-beta.11

然后运行命令:

npm 安装

在所有这些安装之后,我创建了一个名为 WelcomeScreen.js 的类,这是下面给出的代码-

WelcomeScreen.js

import React, { Component } from "react";
import {
    View,
    StyleSheet,
    Button
} from "react-native";

class WelcomeScreen extends Component {

    static navigationOptions = {
        header: 'none'
    }

    render() {
        return (
            <View style={styles.container}>
                <Button title="Log in" onPress={() => this.props.navigation.navigate('LoginScreen')}/>
                <Button title="Sign Up" onPress={() => this.props.navigation.navigate('SignUpScreen')}/>
            </View>
        )
    }
}
export default WelcomeScreen;

const styles = StyleSheet.create({
    container: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center'
    }
});

之后,我在我的 App.js 文件中路由了这个类。这是下面给出的代码:

App.js

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

import { StackNavigator } from 'react-navigation'
import WelcomeScreen from './screens/WelcomeScreen'
export default class App extends React.Component {
  render() {
    return (
      <AppStackNavigator/>
    );
  }
}

const AppStackNavigator = new StackNavigator({
  WelcomeScreen: { screen: WelcomeScreen }
})


const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

然后在运行我的项目后,我不断收到此错误:

不变违规:文本字符串必须在组件内呈现

Invarient violation:Text strings must be rendered within a component

我不明白为什么会出现此错误? 我尝试了以下解决方案-

Invariant Violation: Text strings must be rendered within a <Text> component

https://github.com/facebook/react-native/issues/20084

它们都对我没有帮助。所以,如果有人能帮我解决这个问题,那就太好了。

【问题讨论】:

  • 您为什么使用react-navigation@^1.0.0-beta.11 而不是最新的react-navigation 3?可能是这个旧版本引起的问题

标签: javascript react-native expo


【解决方案1】:

我会考虑使用 React 的最新导航包 react-navigation-stack(目前在 2.0 alpha - link)。

您可以像以前的 react-navigation 堆栈导航器一样实现它。

import React from 'react'
// ...
import { createAppContainer } from 'react-navigation'
import { createStackNavigator } from 'react-navigation-stack'

const HomeStack = createStackNavigator(
  { HomeScreen, AboutScreen },
  { initialRouteName: "HomeScreen" }
)

HomeStack.navigationOptions = {
  headerShown: false, // a more concise option, to avoid future deprecation.
}
// ... continues in next code block

不要忘记将您的应用程序也包含在 react-navigation AppContainer 中。

// ...
const AppNav = createAppContainer(HomeStack)

export default AppNav

当然,如果您在其他屏幕中修改 navigationOptions,您只需在该屏幕组件中附加备用选项:

class HomeScreen extends React.Component {
    static navigationOptions = {
        headerShow: false        
    }
    render() { 
        return (<View><Text>Welcome home.</Text></View>)
    }
}

如上所示,我们现在可以使用导航选项:headerShown: false

使用这个新包,您将为您的应用程序为 React 导航包的未来迭代做好准备。


注意 ; 作为样式选择被忽略了。

【讨论】:

    【解决方案2】:

    您在标题中使用了错误的值

    static navigationOptions = {
        header: "none"        
    };
    

    "none" 替换为null

    static navigationOptions = {
            header: null        
    };
    

    【讨论】:

      【解决方案3】:
          const AppStackNavigator = new StackNavigator({
        WelcomeScreen: { screen: WelcomeScreen }
      })
      
      
      const styles = StyleSheet.create({
        container: {
          flex: 1,
          backgroundColor: '#fff',
          alignItems: 'center',
          justifyContent: 'center',
        }**,**
      });
      

      是这个逗号吗?

      【讨论】:

      • 是的,确实如此。我删除了它,但仍然遇到同样的错误。
      猜你喜欢
      • 2020-08-19
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多