开发者问题收集

函数未被调用 React native

2021-08-31
367

我有一个名为 setSTNo 的函数,但未被调用。我尝试了很多次,但无法找出错误。需要助手..

code

const  onRefresh = React.useCallback(async() => {
    setserviceTData([])
    fetch(`${API_URL}/v1/serviceTicket`, {
        method: 'GET',
        headers: {
            Accept: 'application/json',
            'apiKey': 'asdkhjfgsed34e',
            'deviceId': deviceId,
            'sessionId': sessionId

        },
    })
        .then((response) => response.json())
        .then((json) => {
            if (!json.success ) {
                if (json.errorCode === 403) {
                    sessionExpire()
                }
            } else if(json.data){
                setserviceTData(json.data);
                console.log('Ticket Data',json.data);
                setSTNo();

            }
        }
        )
        .catch((error) => console.error(error))
        .finally(() => setLoading(false));
        
    }, [refreshing]);
    
    console.log("st No" , serviceTData)

上面的 console.log 函数工作正常。但我不知道为什么它没有调用该函数并显示 [TypeError: undefined 不是对象(评估“serviceTData.id”)] 我的函数如下

async function  setSTNo  (serviceTData)  {
    console.log("st No tryyy" )
       try {
        await AsyncStorage.setItem('STnumber', serviceTData.id);
        setLaststNumber(serviceTData.id);
        console.log("OLD st No" , LaststNumber);
       } catch (e){
        console.log("Error Part",e);
       }
    }
2个回答

函数 setSTNo 需要参数 serviceTData ,但您并未将其传递给该参数。 我猜 serviceTData 是您的 useState 项之一,并且您希望在 serviceTData 值更新时调用函数 setSTNo

如果是这样,

  1. 您可以从 async function setSTNo (serviceTData) 参数列表中删除 serviceTData
  2. 添加 useEffect 以监听 serviceTData 项中的更改,然后在 serviceTData 更新时调用函数 setSTNo
  3. 从您的 API 调用中删除 setSTNo 函数调用,然后阻止。
async function  setSTNo  ()  {
   console.log("st No tryyy" )
   try {
     await AsyncStorage.setItem('STnumber', serviceTData.id);
     setLaststNumber(serviceTData.id);
     console.log("OLD st No" , LaststNumber);
   } catch (e){
     console.log("Error Part",e);
   }
 }

然后添加 useEffect 来监听您的 serviceTData 状态。

useEffect(() => {
 if(serviceTData)
   setSTNo();
},[serviceTData]);

假设 serviceTData 的初始状态为 null

nithinpp
2021-08-31

看来您的函数 setSTN 需要一个您未发送的参数

您的代码:

} else if(json.data){
  setserviceTData(json.data);
  console.log('Ticket Data',json.data);
  setSTNo(); //TODO THIS NEEDS AN ARGUMENT <------------------
}
ThatsRight
2021-08-31