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);