Javascript React Hooks状态未使用正确的输出进行更新

Javascript React Hooks状态未使用正确的输出进行更新,javascript,reactjs,react-hooks,state,Javascript,Reactjs,React Hooks,State,我在用鱼钩。我试图对从API获取的数据进行排序,并用新排序的数据更新状态 const [runs, setRuns] = useState({ runs: [], }); const [altConcentrationRuns, setAltConcentrationRuns ] = useState({ altConcentrationRuns : [] }) async function handleRuns() { getRuns().then((resu

我在用鱼钩。我试图对从API获取的数据进行排序,并用新排序的数据更新状态

const [runs, setRuns] = useState({
    runs: [],
  });
const [altConcentrationRuns, setAltConcentrationRuns ] = useState({
    altConcentrationRuns : []
  })

async function handleRuns() {
    getRuns().then((result) => {
    
      setRuns(result.rows);
      setFilteredRuns(result.rows);

      //function to sort data according to column header/property
      
      const sortRowsByProperty = (property, direction) => {
        return result.rows.sort(function(a,b) { 
          var A = Object.keys(a)[0];
          var B = Object.keys(b)[0];
          if(direction == "ascending") {
                return (a[A][property] - b[B][property]);
              } else if(direction == "descending") {
                return b[B][property] - a[A][property];
              }
          });
        } 
        setAltConcentrationRuns(sortRowsByProperty('altConcentration', 'ascending'));
        //not updating, only showing runs 

      
      setIsLoading(false);
      
      
    });
  }

  useEffect(() => {
    setIsLoading(true);
    handleRuns();
    
  }, []);
  console.log('runs', altConcentrationRuns);

当我控制台记录我的输出时,我没有得到排序的数据,只有原始数据(result.rows)。我做错了什么


谢谢

我发现您的代码中有一个问题。您正在以错误的方式初始化您的状态

const [runs, setRuns] = useState([]);
const [altConcentrationRuns, setAltConcentrationRuns ] = useState([])

这是初始化状态的方式。问题在于你的排序功能。在JS中,要对项目进行排序,通常的做法是在
a
时返回
-1
,在
a==b
时返回
0
,在
a>b
时返回
1
。通常可以忽略
==
条件,只返回
-1
1

if(方向==“升序”){
返回a[a][property]

这可以进一步优化,但为了便于理解,请保持与代码相似。

谢谢,但它仍然没有排序。我在其他数据上测试了我的函数,结果很好。这个答案实际上是不正确的@NadiaChibrikova,你能详细解释一下吗?您不需要返回
-1
0
1
,但这些值与需求中所需的
负值、0正值对齐。我确实说过应该这样做,因为这是一个最佳实践。返回
a[a][property]-b[b][property]
仅对数字有效,但从您的回答来看,排序函数似乎只能对-1、0和1有效,事实并非如此,你可以使用任何正数和负数你读了我其余的评论了吗?你能添加你在控制台中得到的日志吗?一个对象数组,它不是按altConcentration排序的,而是原始的获取数据数组(运行)一个屏幕截图:)
altConcentration
确实是一个字符串,你不能对字符串进行子结构,所以你应该遵循@xdumain的建议。此外,排序会对原始数组进行变异,因此当它被排序时,它将被排序到所有位置