Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当状态更新时,React组件不重新呈现_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 当状态更新时,React组件不重新呈现

Javascript 当状态更新时,React组件不重新呈现,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,更新redux存储时,React组件未呈现 如果我使用set timeout,我可以在控制台中看到数据。组件不渲染的原因 我的组件没有得到更新的原因是什么。我已经附上下面的代码 组成部分 减速器 您需要在reducer中返回一个新的对象实例 React需要对象的新引用,以找出已更改的状态 当您传递action.payload时,您将在获取数据后返回相同的实例 function getalluserlist(state = [], action) { switch (action.type)

更新redux存储时,React组件未呈现

如果我使用set timeout,我可以在控制台中看到数据。组件不渲染的原因

我的组件没有得到更新的原因是什么。我已经附上下面的代码

组成部分

减速器


您需要在reducer中返回一个新的对象实例

React需要对象的新引用,以找出已更改的状态

当您传递action.payload时,您将在获取数据后返回相同的实例

function getalluserlist(state = [], action) {
  switch (action.type) {
    case "userlist":
      return action.payload;
    default:
      return state;
  }
}
因此,返回一个新的引用,我猜状态的形状是[]


我不认为这是问题所在,requestAPI不会等待任何承诺的解决,而只是返回一个空数组payload@AsafAviv这可能也是一个问题,但最大的问题是如何在reducer中返回数据,所以Sung的答案是正确的too@AdamKosmala我不认为action.payload==状态或者我遗漏了什么?
function requestAPI(type) {
console.log("requestAPI")
switch (type) {
    case 'country':
    let countryist = [];
    getcountryist()
        .then(data => countryist.push(...data.resultSet))
        .catch(reason => console.log(reason.message))
    return {
        type: 'countrylist',
        payload: countryist
    };
    case 'all':
        let userlist = [];
        getlistofuser()
            .then(data => userlist.push(...data.resultSet))
            .catch(reason => console.log(reason.message))
        return {
            type: 'userlist',
            payload: userlist
        };

    }

 }

export default requestAPI;

 async function getlistofuser() {
   let response = await fetch('https://api.myjson.com/bins/13g2pv');
   let data = await response.json();
   return data;
 }
 async function getcountryist() {
  let response = await fetch('https://api.myjson.com/bins/1g9fqv');
  let data = await response.json();
  return data;
}
function getalluserlist(state = [], action) {
console.log("Reducer")
console.log(action.payload)
switch (action.type) {
    case 'userlist':
        return action.payload
    default:
        return state
 }
}

 export default getalluserlist;
function getalluserlist(state = [], action) {
  switch (action.type) {
    case "userlist":
      return action.payload;
    default:
      return state;
  }
}
function getalluserlist(state = [], action) {
  switch (action.type) {
    case "userlist":
      return [...state, action.payload];
    default:
      return state;
  }
}