除非刷新应用程序,否则 SET 方法第一次不起作用 - React Native
Posted
技术标签:
【中文标题】除非刷新应用程序,否则 SET 方法第一次不起作用 - React Native【英文标题】:SET method is not working the first time unless app is refreshed - React Native 【发布时间】:2021-11-21 05:34:59 【问题描述】:我正在尝试 setPackages
中的 useEffect
一切正常,除了 setPackages
方法。它第一次不起作用,但是当我通过从 VS Code 中保存 CTRL+S 来刷新应用程序时,它起作用了,setPackages
起作用了。
以下是代码。
const [packages, setPackages] = useState([]);
useEffect(() =>
const getPackages = async () =>
Purchases.setDebugLogsEnabled(true);
Purchases.setup("MY_KEY_HERE");
try
const offerings = await Purchases.getOfferings();
if (offerings.current !== null)
console.log(offerings.current.availablePackages); //This displays the data (works)
setPackages(offerings.current.availablePackages); //This do not set the data in packages unless app refreshed
else
console.log("No offerings found");
catch (e)
console.log("Error => " + e);
getPackages();
,[])
我每次都需要刷新应用程序才能使这条线正常工作。这里可能有什么问题?
【问题讨论】:
你在useEffect中不调用getPackages,只是声明函数? 我叫它,让我更新代码。忘了说。 由于结果的 console.log() 有效,这意味着您实际上确实收到了预期的数据。我很好奇;您当前如何显示packages
变量?
你可以试试这个setPackages([...offerings.current.availablePackages]);
吗?
【参考方案1】:
您正在声明该函数,但没有调用它。如果您希望在启动时调用一次而不是一遍又一遍地调用,则应该在 useEffect 中包含一个空的 deps 数组。
const [packages, setPackages] = useState([]);
useEffect(() =>
const getPackages = async () =>
Purchases.setDebugLogsEnabled(true);
Purchases.setup("MY_KEY_HERE");
try
const offerings = await Purchases.getOfferings();
if (offerings.current !== null)
console.log(offerings.current.availablePackages); //This displays the data (works)
setPackages(offerings.current.availablePackages); //This do not set the data in packages unless app refreshed
else
console.log("No offerings found");
catch (e)
console.log("Error => " + e);
;
getPackages();
,[])
【讨论】:
抱歉,我忘了添加我的代码,但我正在调用getPackages
函数,这就是该函数中其他所有内容都有效的原因。
你还有包含空依赖数组的问题吗?
是的,先生。仍然是同样的问题,即使是空数组。【参考方案2】:
我可以建议this hook 处理您的packages
-state 吗?
像这样使用它:
function MyComponent()
// Load packages (will be undefined while loading or updating)
const packages = usePromiseMemo(() =>
Purchases.setDebugLogsEnabled(true);
Purchases.setup('MY_KEY_HERE');
return Purchases.getOfferings().then(offerings =>
if (offerings.current)
console.log(offerings.current.availablePackages); //This displays the data (works)
return offerings.current.availablePackages;
else
console.log('No offerings found');
return undefined;
);
, []); // Alternatively: Replace [] with [Purchases]
// Render
return <div>More stuff here</div>;
我不知道Purchases
来自哪里,但是如果它可能会发生变化,请将其添加到依赖数组中。
另外,如果 'MY_KEY_HERE' 存储在某个变量中,也将其添加到依赖数组中。
【讨论】:
以上是关于除非刷新应用程序,否则 SET 方法第一次不起作用 - React Native的主要内容,如果未能解决你的问题,请参考以下文章
除非我刷新页面,否则 Vue data() 对象输入 v-model 不起作用