我是React-Redux的新手,我对redux动作对象有疑问。当我将对象打印到控制台时,它将正确显示,如下所示:
请检查我的密码。
FeedPage.jsx
class FeedPage extends React.Component {
componentDidMount() {
const { id } = this.props.match.params;
this.props.dispatch(feedActions.getById(id));
console.log("props", this.props);
}
render() {
const { user, feed } = this.props;
...
function mapStateToProps(state) {
const { feed, authentication } = state;
const { user } = authentication;
console.log(JSON.stringify(feed));
return {
user,
feed
};
}
const connectedFeedPage = connect(mapStateToProps)(FeedPage);
export { connectedFeedPage as FeedPage };
reducer.js
export function feeds(state = {}, action) {
switch (action.type) {
case feedConstants.GETBYID_REQUEST:
return {
loading: true
};
case feedConstants.GETBYID_SUCCESS:
console.log("GETBYID_SUCCESS: " + JSON.stringify(action.feed));
return {
feed: action.feed
};
case feedConstants.GETBYID_FAILURE:
return {
error: action.error
};
...
service.js
function getById(id) {
const requestOptions = {
method: 'GET',
headers: authHeader()
};
return fetch(`${config.apiUrl}/feed/${id}`, requestOptions).then(handleResponse);
}
actions.js
function getById(id) {
return dispatch => {
dispatch(request());
feedService.getById(id)
.then(
feed => dispatch(success(feed)),
error => dispatch(failure(error.toString()))
);
};
function request() { return { type: feedConstants.GETBYID_REQUEST } }
function success(feed) { return { type: feedConstants.GETBYID_SUCCESS, feed } }
function failure(error) { return { type: feedConstants.GETBYID_FAILURE, error } }
}
更新:
根部减速器
import { combineReducers } from 'redux';
import { authentication } from './authentication.reducer';
import { registration } from './registration.reducer';
import { users } from './users.reducer';
import { alert } from './alert.reducer';
import { feeds } from './feeds.reducer';
const rootReducer = combineReducers({
authentication,
registration,
users,
alert,
feeds
});
export default rootReducer;
这是日志的屏幕截图:
因此很明显,提要对象不为空。但是当我引用它时,它是不确定的。请帮助,因为我被困住了,无法前进。任何帮助都非常感谢。谢谢!
答案 0 :(得分:1)
在您的root reducer中,您说的是“ feeds”项将包含feedReducer提供的内容。在您的feedReducer中返回“ feed:action.feed”。
因此,在mapStateToProps中,您应该映射“提要”,而不是“提要”。然后,当您读取feed值时,它将包含一个对象,例如{feed:xxx},其中xxx是您在API调用后最初对其执行的操作。
答案 1 :(得分:0)
减速器出现问题。您正在更改组件状态,因为当我们更改状态并且组件不会重新呈现时,它的存储不会更新
case feedConstants.GETBYID_SUCCESS:
console.log("GETBYID_SUCCESS: " + JSON.stringify(action.feed));
return {
...state,
feed: action.feed
};
在您的情况下,Redux不会检测到状态差异,也不会通知组件存储已更改,因此您应该返回具有必要更改的新状态副本。希望这能解决问题 让我知道问题是否仍然存在。