不变违规:元素类型无效:期望字符串或类/函数但得到:object

时间:2018-01-26 20:28:38

标签: javascript react-native redux

我知道this question但似乎我的问题不同(即我不认为它是一个不正确的结构导入)

这是我得到的错误。提到的文件位于react-native库的深处,不幸的是,消息的信息量不大。

  

ExceptionsManager.js:73检查renderApplication.js上的代码:35。

     

不变违规:元素类型无效:预期为字符串(for      内置组件)或类/函数(用于复合组件)      但得到了:对象。 ExceptionsManager.js:65

     

此错误位于:

in RCTView (at View.js:71)
in View (at AppContainer.js:102)
in RCTView (at View.js:71)
in View (at AppContainer.js:122)
in AppContainer (at renderApplication.js:34)

下面的index.js给出了错误,但是如果我通过使用注释行直接显示我的组件而不是注册,那么一切都按预期工作。

index.js:

import { AppRegistry } from 'react-native';
import {App} from './src/App';
import {Test} from './src/App';
//AppRegistry.registerComponent('MyApp', () => Test);
AppRegistry.registerComponent('MyApp', App);

./ SRC / App.js:

import React, { Component } from 'react';
import {Provider} from 'react-redux';
import { createStore, applyMiddleware, combineReducers, compose } from 'redux';
import { createLogger } from 'redux-logger'
import reducer from './reducers/index'
import AppContainer from './containers/AppContainer'
import {  Text,  View} from 'react-native';

const loggerMiddleware = createLogger({predicate: (getstate, action) => __DEV__});

function ConfigureStore(initialState){
   const enhancer = compose(
     applyMiddleware(loggerMiddleware)
   );

   return createStore(reducer,initialState, enhancer);
  }

const store = ConfigureStore({});

export class Test extends Component<{}> {
  render() {
    return (
      <View >
        <Text >
         xxx
         </Text>
      </View>
    );
  }
}

export const App= () =>(
  <Provider store={store}>
    <Test/>
  </Provider>
);

2 个答案:

答案 0 :(得分:3)

将代码更改为以下内容可正常工作。

AppRegistry.registerComponent('MyApp', () => App);

registerComponent似乎期望一个返回组件或无状态组件的函数,而不是组件(JSX)的内容。

答案 1 :(得分:0)

这是导入问题。当我使用时: 在cart.js中 const CartItem = require("./cart-item"); 在cart-item.js中 export default CartItem 我确实有这个问题,但是当我更改导入时: 在cart.js中 import CartItem from "../cart/cart-item"; 一切正常!