gpt4 book ai didi

javascript - 无法使用组合 reducer REACT 显示数据

转载 作者:行者123 更新时间:2023-12-01 01:58:03 25 4
gpt4 key购买 nike

without redux it works so that not a api connection problem

我有一个快速应用程序连接到与代理 react 我已经设法在 react 中显示我的数据,但现在我想在 redux soo 中进行:

这是我的问题,我已经制作了所有 reducer /操作、存储和组合 reducer ,但是我在页面中没有看到任何数据并且我没有任何错误

这是我的代码:

Action

export const api = ext => `http://localhost:8080/${ext}`;

//
// ─── ACTION TYPES ───────────────────────────────────────────────────────────────
//

export const GET_ADVERTS = "GET_ADVERTS";
export const GET_ADVERT = "GET_ADVERT";

//
// ─── ACTION CREATORS ────────────────────────────────────────────────────────────
//

export function getAdverts() {
return dispatch => {
fetch("adverts")
.then(res => res.json())
.then(payload => {
dispatch({ type: GET_ADVERTS, payload });
});
};
}

export function getAdvert(id) {
return dispatch => {
fetch(`adverts/${id}`)
.then(res => res.json())
.then(payload => {
dispatch({ type: GET_ADVERT, payload });
});
};
}

reducer

import { combineReducers } from "redux";
import { GET_ADVERTS, GET_ADVERT } from "../actions/actions";
const INITIAL_STATE = {
adverts: [],
advert: {}
};

function todos(state = INITIAL_STATE, action) {
switch (action.type) {
case GET_ADVERTS:
return { ...state, adverts: action.payload };
case GET_ADVERT:
return { advert: action.payload };
default:
return state;
}
}

const todoApp = combineReducers({
todos
});

export default todoApp;

index.js

//imports
const store = createStore(todoApp, applyMiddleware(thunk));

ReactDOM.render(
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>,

document.getElementById("app")
);

My advertlist page :

//imports..

class Adverts extends Component {


componentDidMount() {
this.props.getAdverts();
}

render() {
const { adverts = [] } = this.props;

return (
<div>
<Header />
<h1>Adverts</h1>
{adverts.map(advert => (
<li key={advert._id}>
<a href={"adverts/" + advert._id}>
{advert.name} {advert.surname}
</a>
</li>
))}

<Footer />
</div>
);
}
}

const mapStateToProps = state => ({
adverts: state.adverts
});

export default connect(
mapStateToProps,
{ getAdverts }
)(Adverts);

最佳答案

我认为你的问题在这里:

function mapStateToProps(state) {
return {
**adverts: state.adverts**
};
}

如果您将 state.adverts 更改为 state.todos.adverts,它应该会起作用:

function mapStateToProps(state) {
return {
adverts: state.todos.adverts
};
}

因为你的reducer被称为todos,并且它有状态{adverts},这就是为什么你无法访问广告,即使它们已获得。

您可以在此处查看工作版本:https://codesandbox.io/s/olqxm4mkpq

关于javascript - 无法使用组合 reducer REACT 显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com