需要访问动作创建者

时间:2017-12-18 22:07:56

标签: react-native redux redux-thunk

我试图从我的动作创建者中的不同缩减器访问一个状态。我知道那里已经存在很多问题,但到目前为止,我仍然不知道为什么即使阅读它们之后它也不起作用。我的动作创建者从Firebase获取JSON,并根据另一个名为“搜索”的状态对其进行过滤。来自搜索减速器。这是代码:

行动创作者:

 export const searchResult = () => {
   const { currentUser } = firebase.auth();
   return (dispatch, getState) => {
      firebase.database().ref(`/users/${currentUser.uid}/entries`)
         .orderByChild('uid')
            .on('value', snapshot => {
                const myObj = snapshot.val();
                const { search } = getState().searching;
                const list = _.pickBy(myObj, (((value) => 
                      value.make.indexOf(search) !== -1 || 
                      value.model.indexOf(search) !== -1));

    dispatch({ type: SEARCH_RESULT_SUCCESS, payload: list });
    });
   };
  };

这里是搜索过滤器文本输入的Action Creator:

 export const searchChanged = (text) => {
   return {
      type: SEARCH_CHANGED,
      payload: text
  };
 };

这里是searchResult的reducer,名为entryReducer:

import {
   SEARCH_RESULT_SUCCESS,
   ENTRY_FETCH_SUCCESS,
   SOLD_RESULT_SUCCESS
 } from '../actions/types';

 const INITIAL_STATE = [];

 export default (state = INITIAL_STATE, action) => {
    switch (action.type) {
       case ENTRY_FETCH_SUCCESS:
          return action.payload;
       case SEARCH_RESULT_SUCCESS:
          return action.payload;
       case SOLD_RESULT_SUCCESS:
          return action.payload;
       default:
          return state;
    }
  };

这里是searchReducer:

 import {
    SEARCH_CHANGED,
 } from '../actions/types';

 const INITIAL_STATE = {
     search: '',
 };

 export default (state = INITIAL_STATE, action) => {
     switch (action.type) {
         case SEARCH_CHANGED:
             return { ...state, search: action.payload };
         default:
             return state;
     }
    };

这里是combineReducers函数:

 import { combineReducers } from 'redux';
 import AuthReducer from './AuthReducer';
 import EntryFormReducer from './EntryFormReducer';
 import EntryReducer from './EntryReducer';
 import SearchReducer from './SearchReducer';
 import PasswordReducer from './PasswordReducer';

 export default combineReducers({
   auth: AuthReducer,
   entryForm: EntryFormReducer,
   employees: EntryReducer,
   searching: SearchReducer,
   pw: PasswordReducer

 });

这里我称之为searchResult():

class EmployeeList extends Component {
  componentWillMount() {
     this.props.searchResult();

我的mapStateToProps():

 const mapStateToProps = (state) => {
    const employees = _.map(state.employees, (val, uid) => {
       return { ...val, uid };
  });

   return { employees };
 };

 export default connect(mapStateToProps, { searchResult, entryClear, 
   logoutUser })(EmployeeList);

这里搜索searchChanged()的内容是搜索:

 import React, { Component } from 'react';
 import { View } from 'react-native';
 import { connect } from 'react-redux';
 import { Icon } from 'react-native-vector-icons';
 import { searchChanged, searchResult } from '../actions';
 import Card from './common/Card';
 import CardSection from './common/CardSection';
 import Input from './common/Input';


 class Search extends Component {

  onSearchChange(text) {
    this.props.searchChanged(text);
        searchResult();
 }

代码运行得很好,但是当我输入搜索过滤器文本输入时没有任何变化。我可以看到我的一块州名为“搜索”。从搜索' reducer得到更新。但我的行动创造者' searchResult'没有访问它来过滤它。任何帮助将不胜感激......我是redux的新手。

0 个答案:

没有答案