Javascript 如何访问不同组件中的存储?

Javascript 如何访问不同组件中的存储?,javascript,reactjs,redux,reducers,Javascript,Reactjs,Redux,Reducers,所以我有一个搜索栏,在那里我用redux存储查询,这似乎是可行的。我现在尝试在一个结果组件中访问该查询,我将使用该组件显示查询结果 我尝试过使用MapStateToProps,然后在我的结果组件中调用{this.props.query},但是没有从搜索栏中得到查询更改 店铺创建: import ReactDOM from "react-dom"; import "./index.css"; import App from "./App"; import * as serviceWorker fr

所以我有一个搜索栏,在那里我用redux存储查询,这似乎是可行的。我现在尝试在一个结果组件中访问该查询,我将使用该组件显示查询结果

我尝试过使用MapStateToProps,然后在我的结果组件中调用{this.props.query},但是没有从搜索栏中得到查询更改

店铺创建:

import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
import { BrowserRouter } from "react-router-dom";
import { createStore, combineReducers, applyMiddleware } from "redux";
import { userReducer } from "./redux/reducers/user-reducer";
import { searchReduer } from "./redux/reducers/search-reducer"
import logger from "redux-logger";
import { Provider } from "react-redux";

const store = createStore(
  combineReducers({
      user: userReducer,
      query: searchReducer,
  }),
  {},
  applyMiddleware(logger)
);

ReactDOM.render(
  <Provider store={store}>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </Provider>,
  document.getElementById("root")
);

serviceWorker.unregister();

在搜索结果中,{this.props.query}始终是未定义的,即使我在搜索栏中输入文本时可以看到state.query发生了变化。我假设我对Redux有些误解,但我不太确定是什么,因为我能够在我的搜索组件中正确更新searchQuery。

看起来您在一些地方混淆了query和searchQuery

  combineReducers({
      user: userReducer,
      query: searchReducer,
  }),
您正在将state.query设置为全局查询对象,但两个MapStateTrop都在尝试访问state.searchQuery

另外,在Search的呈现中,有const{searchQuery,classes}=this.props;,但同样,mapStateToProps正在将state.searchQuery映射到props.query,因此props.searchQuery是未定义的

似乎您只需确保使用了正确的映射,或者选择query或searchQuery并在全局状态和道具中使用它。

使用:

function mapStateToProps(state) {
return { query: state.query.searchQuery };
}

商店代码?你要去商店的地方。同样发布。看起来您正在使用react-redux,但看不到您正在使用提供商来启动存储。如果可以粘贴这部分代码,将有助于区分问题@AnilKumar更新了。@tim更新了,见上文。这就像已经解决了一样。你是一个救生员。我已经调试了几个小时,完全错过了,谢谢!
export const initialQuery = '';

export const searchReducer = (state = initialQuery, action) => {

    switch (action.type) {
        case "SEARCH":
            return action.value;
        default:
            return state;
    }

};
  combineReducers({
      user: userReducer,
      query: searchReducer,
  }),
function mapStateToProps(state) {
return { query: state.query.searchQuery };
}