Reactjs 为什么我的动作会导致道具改变?
我有一个组件显示收到的帖子,另一个组件显示用户发布的帖子,我的操作根据他们单击的选项卡抓取帖子。以下是行动Reactjs 为什么我的动作会导致道具改变?,reactjs,redux,Reactjs,Redux,我有一个组件显示收到的帖子,另一个组件显示用户发布的帖子,我的操作根据他们单击的选项卡抓取帖子。以下是行动 import { FETCH_POSTS_RECEIVED } from './types'; export const fetchPostReceived = (id) => dispatch => { fetch('/posts/vh5given/' + id , { method: 'GET', headers: {
import { FETCH_POSTS_RECEIVED } from './types';
export const fetchPostReceived = (id) => dispatch => {
fetch('/posts/vh5given/' + id , {
method: 'GET',
headers: {
'content-type' : 'application/json'
}
})
.then(res => res.json())
.then(userPosts => dispatch ({
type:FETCH_POSTS_RECEIVED,
payload: userPosts
}));
// .then(data = console.log(data));
}
export const fetchPostsFromUser = (id) => dispatch => {
fetch('/posts/' + id , {
method: 'GET',
headers: {
'content-type' : 'application/json'
}
})
.then(res => res.json())
.then(posts => dispatch ({
type:FETCH_POSTS_FROM_USER,
payload: posts
}));
// .then(data = console.log(data));
}
在ComponentDidUpdate上调用这些函数
componentDidUpdate(prevProps) {
// console.log(prevUserId);
let prevUserId = prevProps.user.map((user) => (user.id));
let userId = this.props.user.map((user) => (user.id));
if(prevUserId.length < 1 || prevUserId == undefined && userId) {
console.log("Currently Updating from vh5");
console.log(prevUserId);
console.log(userId);
this.props.fetchPostReceived(userId);
}
}
componentDidUpdate(prevProps) {
// console.log(prevUserId);
let prevUserId = prevProps.user.map((user) => (user.id));
let userId = this.props.user.map((user) => (user.id));
if(prevUserId.length < 1 || prevUserId == undefined){console.log('undefineeeeed')}
if(prevUserId.length < 1 || prevUserId == undefined && userId) {
console.log("Currently Updating");
console.log(prevUserId);
console.log(userId);
this.props.fetchPostsFromUser(userId);
console.log('this is the props ' + this.props.posts)
}
}
componentDidUpdate(prevProps){
//console.log(prevUserId);
让prevUserId=prevProps.user.map((user)=>(user.id));
让userId=this.props.user.map((user)=>(user.id));
if(prevUserId.length<1 | | prevUserId==未定义&&userId){
控制台日志(“当前从vh5更新”);
console.log(prevUserId);
console.log(userId);
this.props.fetchPostReceived(userId);
}
}
componentDidUpdate(prevProps){
//console.log(prevUserId);
让prevUserId=prevProps.user.map((user)=>(user.id));
让userId=this.props.user.map((user)=>(user.id));
if(prevUserId.length<1 | | prevUserId==undefined){console.log('undefineeeed')}
if(prevUserId.length<1 | | prevUserId==未定义&&userId){
console.log(“当前正在更新”);
console.log(prevUserId);
console.log(userId);
this.props.fetchPostsFromUser(userId);
console.log('this is the props'+this.props.posts)
}
}
我遇到的问题是,当调用Fetch Post Received函数时,道具会发生更改。因为我是在更新道具状态时渲染帖子的,所以会显示错误的帖子。
为什么会发生这种情况,我如何修复它?我无法添加注释,但您是在调用componentDidMount两次(这是您的代码所建议的),还是您尝试过的这两种不同的方法,因为
let prevUserId = prevProps.user.map((user) => (user.id));
let userId = this.props.user.map((user) => (user.id));
或
发射两次可能是您的问题。为什么您有两个组件dUpdate?如果我理解正确,问题最有可能出现在减速器中(如果状态正在更改,而您没有预料到)。你能给我看一下减速机吗?对不起,如果我不清楚,但它有两个不同的部件。谢谢詹姆斯,我在另一个减速机上收到了取回邮件,所以它在那里两次。谢谢我想减速机可能有问题。可能你没有在一个不变的模式中改变你的对象。但是还有一个困惑,你提到道具会被改变。你这么说到底是什么意思?
this.props.fetchPostsFromUser(userId);