我只是做一个简单的应用程序来学习与redux异步。我已经使所有工作正常进行,现在我只想在网页上显示实际状态。现在,我实际上如何在render方法中访问商店的状态?
这是我的代码(所有内容都在一页中,因为我只是在学习):
const initialState = { fetching: false, fetched: false, items: [], error: null } const reducer = (state=initialState, action) => { switch (action.type) { case "REQUEST_PENDING": { return {...state, fetching: true}; } case "REQUEST_FULFILLED": { return { ...state, fetching: false, fetched: true, items: action.payload } } case "REQUEST_REJECTED": { return {...state, fetching: false, error: action.payload} } default: return state; } }; const middleware = applyMiddleware(promise(), thunk, logger()); const store = createStore(reducer, middleware); store.dispatch({ type: "REQUEST", payload: fetch('http://localhost:8000/list').then((res)=>res.json()) }); store.dispatch({ type: "REQUEST", payload: fetch('http://localhost:8000/list').then((res)=>res.json()) }); render( <Provider store={store}> <div> { this.props.items.map((item) => <p> {item.title} </p> )} </div> </Provider>, document.getElementById('app') );
因此,在状态的render方法中,我想列出item.title商店中的所有内容。
item.title
谢谢
您应该创建单独的组件,该组件将侦听状态更改并在每次状态更改时进行更新:
import store from '../reducers/store'; class Items extends Component { constructor(props) { super(props); this.state = { items: [], }; store.subscribe(() => { // When state will be updated(in our case, when items will be fetched), // we will update local component state and force component to rerender // with new data. this.setState({ items: store.getState().items; }); }); } render() { return ( <div> {this.state.items.map((item) => <p> {item.title} </p> )} </div> ); } }; render(<Items />, document.getElementById('app'));