操作可能没有未定义的“类型”属性 - React-Native / Redux

时间:2017-01-15 16:46:21

标签: react-native redux react-redux

我收到Actions may not have an undefined "type" property. Have you misspelled a constant?操作文件中所有操作的RecommendationItemActions.js错误。

enter image description here

包含在。

中的两个导出都会出现此问题
import firebase from 'firebase';
import {} from 'redux-thunk';

import {
  RECOMMENDATION_ITEM_UPDATE,
  RECOMMENDATION_ITEMS_FETCH_SUCCESS
} from './types';

export const recommendationItemUpdate = ({ prop, value }) => {
  //ex. Want to change name? Send in prop [name] and value [ what you want the new name to be ]
  return {
    type: RECOMMENDATION_ITEM_UPDATE,
    payload: { prop, value }
  };
};


export const recommendationItemsFetch = () => {
  const { currentUser } = firebase.auth();

  return (dispatch) => {
    firebase.database().ref(`/users/${currentUser.uid}/recommendationItems`)
    //snapshot is the value found
    //snapshot is an object that describes what data is there
      .on('value', snapshot => {
        console.log(snapshot.val());
        dispatch({
          type: RECOMMENDATION_ITEMS_FETCH_SUCCESS,
          payload: snapshot.val()
        });
        //snapshot.val() is the actual data at snapshot
      });
  };
};

这些types在导入的type.js文件

中明确定义
export const RECOMMENDATION_ITEMS_FETCH_SUCCESS = 'recommendation_items_fetch_success';
export const RECOMMENDATION_ITEM_UPDATE = 'recommendation_item_update';

操作通过index.js文件夹

中的actions文件导出
export * from './RecommendationItemActions';

它们是在RecommendationItemCreate.js文件

中导入的
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Text, Image, View } from 'react-native';
import { recommendationItemUpdate, recommendationItemCreate } from '../../actions';
import { CardSection, Input, Button } from './../common';
import GooglePlacesAutocomplete from './../googlePlaces/GooglePlacesAutocomplete';

并在onChangeText组件的Input内引用

  <Input
    label="ADDRESS"
    placeholder="Address"
    value={this.props.formattedAddress}
    onChangeText={
      value => this.props.recommendationItemUpdate({ prop: 'formattedAddress', value })
    }
  />

我无法追踪导致Actions may not have an undefined "type" property的任何错误,而且几天来我一直在反对这个错误。 type已明确定义,可在整个使用过程中准确跟踪。

找到最近的参考 React+Redux - Uncaught Error: Actions may not have an undefined “type” property

这仍然没有用。这是我的createStore作为参考:

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import firebase from 'firebase';
import ReduxThunk from 'redux-thunk';
import reducers from './reducers';
import Router from './Router';

class App extends Component {
  componentWillMount() {
    const config = {
      REMOVED FOR EXAMPLE
    };
    firebase.initializeApp(config);
  }

  render() {
    const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));
    //applyMiddleware is a store-enhancer - it adds additional functionality
    //to store

    return (
      <Provider store={store}>
        <Router />
      </Provider>
    );
  }
}

export default App;

2 个答案:

答案 0 :(得分:1)

我相信我之前遇到过这样的问题,这是因为在thunk中调度普通对象而不是动作创建者,例如你在做什么。你能尝试创建一个recommendationItemsFetchSuccess动作创建者并发送它吗?如:

&#13;
&#13;
const recommendationItemsFetchSuccess = (snapshotVal) => {
  return {
    type: RECOMMENDATION_ITEMS_FETCH_SUCCESS,
    payload: snapshotVal
  };
 }

export const recommendationItemsFetch = () => {
  const { currentUser } = firebase.auth();

  return (dispatch) => {
    firebase.database().ref(`/users/${currentUser.uid}/recommendationItems`)
      .on('value', snapshot => {
        dispatch(recommendationItemsFetchSuccess(snapshot.val()));
      });
  };
};
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如DJSrA所述,此修复程序是参考错误。就我而言,我是从包含常量的两个不同文件中导入的。我为特定常数引用了错误的文件。