【问题标题】:React Native: expected a string (for built-in components) or a class/function (for composite components) but got: objectReact Native:期望一个字符串(用于内置组件)或一个类/函数(用于复合组件)但得到:对象
【发布时间】:2019-08-06 17:09:51
【问题描述】:

我正在尝试将标题标题更改为图像,但无法正常工作。我尝试过的是使用 LogoTitle 类在我的 Top Tab Navigator 中呈现图像而不是标题,隐藏标题并呈现标题也可以:

TopNavigator.navigationOptions = {
        headerTitle:'test'
};

然后我尝试将其更改为图像:

TopNavigator.navigationOptions = () =>{
    headerTitle:<LogoTitle/>
};

我使用最新的 Expo SDK

这是我的完整代码:

import React from 'react';
import { createStackNavigator, createMaterialTopTabNavigator } from 'react-navigation';

import TabBarIcon from '../components/TabBarIcon';
import PartyScreen from '../screens/PartyScreen';
import EventScreen from '../screens/EventScreen';
import FestivalScreen from '../screens/FestivalScreen';
import ActivityScreen from '../screens/ActivityScreen';
import TestScreen from '../screens/TestScreen';

class LogoTitle extends React.Component {
    render() {
        return (
        <Image
            source={require('../assets/images/Header_Logo.png')}
            style={{ width: '100%', height: '100%', resizeMode: 'center', backgroundColor: 'black' }}
        />
        );
    }
}

const PartyStack = createStackNavigator({
    Party: PartyScreen,
});

PartyStack.navigationOptions = {
    tabBarLabel: "Partys",
    tabBarIcon: ({ focused }) => (
        <TabBarIcon
            focused={focused}
            name={
                'md-calendar'
            }
        />
    ),
};

const EventStack = createStackNavigator({
    Event: EventScreen,
});

EventStack.navigationOptions = {
    tabBarLabel: 'Events',
    tabBarIcon: ({ focused }) => (
        <TabBarIcon
            focused={focused}
            name={
            'md-calendar'
            }
        />
    ),
};

const FestivalStack = createStackNavigator({
    Festival: FestivalScreen,
});

FestivalStack.navigationOptions = {
    tabBarLabel: 'Festivals',
    tabBarIcon: ({ focused }) => (
        <TabBarIcon
            focused={focused}
            name={
            'md-calendar'
            }
        />
    ),
};

const ActivityStack = createStackNavigator({
    Activity: ActivityScreen,
});

ActivityScreen.navigationOptions = {
    tabBarLabel: 'Activiteit',
    tabBarIcon: ({ focused }) => (
        <TabBarIcon
            focused={focused}
            name={
            'md-calendar'
            }
        />
    ),
};

const TestStack = createStackNavigator({
    Test: TestScreen,
});

TestScreen.navigationOptions = {
    tabBarLabel: 'Test',
    tabBarIcon: ({ focused }) => (
        <TabBarIcon
            focused={focused}
            name={
            'md-calendar'
            }
        />
    ),
};

const TopNavigator = createMaterialTopTabNavigator({
    PartyStack,
    EventStack,
    FestivalStack,
    ActivityStack,
    TestStack
}, {
    tabBarOptions: {
      activeTintColor: '#5B71F9',
      inactiveTintColor: '#888888',
      showIcon: false,
      labelStyle: {
        fontSize: 14
      },
      scrollEnabled : true,
      style: {
        backgroundColor: '#fff',
        shadowColor: '#fff',
        shadowOffset: {
          width: 0,
          height: 0,
        },
        shadowOpacity: 0,
        shadowRadius: 0,
        elevation: 0,
        height: 47,
        borderBottomWidth: 1,
        borderBottomColor: '#E8E8E8'
      },
      indicatorStyle: {
        height: 2,
        backgroundColor: '#5B71F9'
      },
    }, 

},  navigationOptions = {
        header:{visible:false}
});

TopNavigator.navigationOptions = {
     headerTitle:<LogoTitle/>
};

export default TopNavigator;

我不明白为什么它会渲染文本但图像不会,我猜它与括号有关

【问题讨论】:

    标签: android react-native expo


    【解决方案1】:

    试试这个:

        const RouteConfigs = {
          // Your routes
        };
    
        const StackNavigatorConfig = {
         navigationOptions: {
            header: (navigation) => ({
                  title: ( <LogoTitle navigation={navigation} /> )
                })
          },
        };
    
    export default createStackNavigator(RouteConfigs, StackNavigatorConfig);
    

    【讨论】:

    • 我已将其替换为:'TopNavigator.navigationOptions = { header: (navigation) => ({ title: ( ) }) };'但这不起作用。 Invariant Violation: Invariant Violation: 对象作为 React 子级无效(发现:带有键 {title} 的对象)。如果您打算渲染一组子项,请改用数组。
    • 对不起,我真的不明白,你能提供一个基于我的代码的例子吗?
    • 我想指出的是......为了在标题中呈现组件,我们不使用这种语法 >> { headerTitle:&lt;LogoTitle/&gt; } 但我们使用这种 >> @ 987654323@ 在 navigationOptions 对象中
    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2021-01-29
    • 1970-01-01
    • 2017-10-13
    • 2020-11-17
    相关资源
    最近更新 更多