Javascript 如何访问不同组件中的存储?
所以我有一个搜索栏,在那里我用redux存储查询,这似乎是可行的。我现在尝试在一个结果组件中访问该查询,我将使用该组件显示查询结果 我尝试过使用MapStateToProps,然后在我的结果组件中调用{this.props.query},但是没有从搜索栏中得到查询更改 店铺创建: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
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 };
}