等待useState设置值然后调用函数

时间:2020-08-09 13:57:22

标签: react-native

我正在使用无经验的react native,当尝试使用UseState设置值时,它不会立即设置,并且我无法在另一个函数中获取值。

const [gridData, setGridData] = useState([]);

useEffect(() => {
        getGridApi().then((response)=>{
            setGridData(response);
            pressed('Mon', 0);
        })
    
}, []);

const pressed = async (category, index) => {
    console.log(gridData); // empty
}

如何让它等待设置,然后调用函数Pressed()

2 个答案:

答案 0 :(得分:1)

您可以使用this package,也可以为此使用自己的自定义钩子。不幸的是,没有提供useState和Callback功能

示例:

从'use-state-with-callback'导入useStateWithCallback;

const App = () => {
  const [count, setCount] = useStateWithCallback(0, count => {
    if (count > 1) {
      console.log('Threshold of over 1 reached.');
    } else {
      console.log('No threshold reached.');
    }
  });
 
  return (
    <div>
      <p>{count}</p>
 
      <button type="button" onClick={() => setCount(count + 1)}>
        Increase
      </button>
    </div>
  );
};

答案 1 :(得分:1)

不幸的是,Cioa带有钩子,设置状态是异步的,您无法以这种方式获取最后一个值。但是您可以使用另一个useEffect钩子来检索状态变量的任何更改。

尝试一下:

useEffect(() => {
   console.log(gridData);  // this shows the last value of gridData setted by the other useEffect
}, [gridData]);

但是请注意:每次useEffect更改他的值时,我会为此gridData触发!