javascript - 组件未通过 mapStateToProps 从 Redux 商店获取 Prop

标签 javascript reactjs redux react-redux

在我的 React 组件中,我需要从 Redux 存储中获取状态作为 Prop 并使用它们。我正在使用 mapStateToProps,它正确地从 redux 存储中获取状态,因为初始值是正确的 console.logged。但是,当我使用它们时,我组件中的所有 Prop 都是未定义的。我没有进行任何明确的异步调用,这似乎是我在之前的问题中发现的问题,所以我不确定为什么我的组件无法访问这些 Prop 。

src/components/SearchBar.js

import React, { Component } from 'react';
import { connect } from 'react-redux';
import actionType from '../constants/action-types';

class SearchBar extends Component {

  render() {
    return (
      <form>
        <input
          type="text"
          placeholder="Search..."
          value={this.props.filterText}
          onChange={this.onTextChange}
        />
        <p>
          <input
            type="checkbox"
            checked={this.props.inStockOnly}
            onChange={this.onInStockCheckedChange}
          />
          {' '}
          Only show products in stock
        </p>
      </form>
    );
  }
}


function mapStateToProps(state) {
    console.log("SearchBar state:", state);

    return {
        filterText: state.filterText,
        showInStockOnly: state.showInStockOnly
    };
}

function mapDispatchToProps(dispatch) {
    return {
        onTextChange: (evt) => {
            const action = {
                type: actionType.UPDATE_ON_TEXT_CHANGE,
                value: evt.target.value
            };
            dispatch(action);
        },

        onInStockCheckedChange: () => {
            const action = {
                type: actionType.SET_IN_STOCK_ONLY_CHECKED,
            };
            dispatch(action);
        }
    };
}

export default connect(mapStateToProps, mapDispatchToProps)(SearchBar);

src/reducers/searchBar_reducer.js

import actionType from '../constants/action-types';
import initialState from '../constants/initial-state';


const searchBar = (state = initialState, action) =>{
    console.log('SearchBar reducer running: ', state, action);

    switch (action.type) {

        case actionType.UPDATE_ON_TEXT_CHANGE:
            console.log("Text change action dispatched!")
            return Object.assign({}, state, { filterText: action.value});

        case actionType.SET_IN_STOCK_ONLY_CHECKED:
            console.log("InStockOnly action dispatched!")
            return Object.assign({}, state, { inStockOnly: !state.inStockOnly});

        default:
            return state;
    }
}


export default searchBar;

src/reducers/index.js

import { combineReducers } from 'redux';

import searchBar from './searchBar_reducer'


const rootReducer = combineReducers({
    searchBar
});


export default rootReducer;

src/index.js

import React from 'react';
import { render } from 'react-dom';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
//import App from './components/App';
import SearchBar from './components/SearchBar'
import rootReducer from './reducers/';

const store = createStore(rootReducer);

const unsubscribe = store.subscribe(() =>
  console.log(store.getState())
)

render(
  <Provider store={store}>
    <SearchBar />
  </Provider>,
  document.getElementById('root')
);

最佳答案

这是因为您正在尝试访问 state.filterText,而您的 reducer 数据存储在 searchBar 中,因此您应该使用 state.searchBar.filterText

关于javascript - 组件未通过 mapStateToProps 从 Redux 商店获取 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767884/

相关文章:

java - Java/Spring 中的全局状态

reactjs - 如何清理 Redux 的状态?

javascript - grunt-contrib-uglify 不会缩小对象属性

javascript - 如何在 YouTube API 中监听来自特定 channel 的新上传内容?

javascript - 在 jquery 中使用 css 对象加上宽度

php - 内容和页脚空间问题

javascript - 检测页面底部以获取更多 react 数据

javascript - redux 是如何存储数据的?

css - 如何让 'Reactjs Modal'出现在屏幕上从右到中飞

css - React 在鼠标悬停时添加图像,平滑过渡