【发布时间】:2022-10-30 06:01:42
【问题描述】:
我正在关注一些关于使用反应变量作为状态管理的教程 react/apollo 客户端应用程序中的解决方案,我注意到有两种方法可以引用反应变量的当前值:
- 使用钩子
useReactiveVar-const myVar = useReactiveVar(myReactiveVar); - 或者只是调用不带参数的反应变量
const myVar = myReactiveVar();
所以我的问题是:
使用一种方法来引用反应变量是否有好处,如果是这样,那为什么?
我有一个理论,即引用反应变量当前值的方式类似于使用基于当前状态设置状态的方式:
- 我们可以直接引用状态 -
setState(count + 1);。 - 或者我们传递一个函数 -
setState((prev) => prev + 1)。 第二种方式被认为“更安全”,因为它保证在异步代码期间准确读取当前状态。我无法确定我的理论是否正确!
这是一个简单的组件,我使用两种方式,并且两者都在使用读取反应变量的当前值的两种情况下工作:
import React from 'react'
import { useQuery, useReactiveVar } from '@apollo/client';
import { missionsLimitRV } from '../../apollo/client';
import { GET_MISSIONS } from '../../data/queries';
export const Missions = () => {
const limit = useReactiveVar(missionsLimitRV); <---here--<<
const { data, loading } = useQuery(GET_MISSIONS, {
variables: {
limit: limit
}
});
const addMission = () => {
missionsLimitRV(missionsLimitRV() + 1) <---here-<<
}
if (loading) {
return <h2>Loading...</h2>
}
if (!data.missions.length) {
return <h2>No Missions Available</h2>
}
const missions = data.missions;
console.log(missions);
return (
<div>
<button onClick={addMission}>add mission</button>
{ missions.map((mission) => (
<div key={mission.id}>
<h2>{mission.name}</h2>
<ul>
{mission?.links?.map((link) => (
<li key={link}><a href={link}>{link}</a></li>
))}
</ul>
</div>
)) }
</div>
);
};
谢谢阅读! :)
【问题讨论】:
标签: reactjs react-hooks apollo apollo-client