我有一个react功能组件,显示标签和帖子列表+几个静态文本/装饰。我使用USESTEST
钩子将当前选定的标记存储在一个状态中。通过使用Apollo的usequery
挂钩和tag
变量获取帖子。用户应该能够选择一个标记,它将替换当前的标记
状态-因此usequery(POSTS_QUERY)
将使用新的标记
变量重新运行。
const onTagSelectChange = (window: Window,
router: NextRouter,
name: string,
checked: boolean,
tagSetter: React.Dispatch<React.SetStateAction<string>>) => {
if (checked) {
setTagQueryInUrl(window, router, name)
tagSetter(name)
} else {
setTagQueryInUrl(window, router, null)
tagSetter(null)
}
}
const NewsList: NextPage = () => {
const router = useRouter()
const query = router.query as Query
// store tag in state
// initialize tag from `tag` query
const [tag, setTag] = useState(query.tag)
const { data: postsData, loading: postsLoading, error: postsError } = useQuery(
POSTS_QUERY,
{
variables: {
tag: tag
}
}
)
const { data: tagsData, loading: tagsLoading, error: tagsError } = useQuery(TAGS_QUERY)
// show error page if either posts or tags query returned error
if (postsError || tagsError) {
return <Error statusCode={500} />
}
return (
<div>
<h1>Here we have list of news, and I should not re-render everytim :(</h1>
<Tags
loading={tagsLoading}
data={tagsData}
isChecked={(name) => name === tag}
onChange={(name, checked) => onTagSelectChange(window, router, name, checked, setTag)}
/>
<Posts loading={postsLoading} data={postsData} />
</div>
)
}
我的问题是,为什么我的h1
块一直在重新呈现,尽管我没有向它传递任何东西?还是我完全误解了react是如何工作的?
每当React组件的状态或道具发生变化时,它们就会重新呈现。如果我读对了,那么每当url发生变化时,您就会在状态中更改标记,从而使组件重新呈现自己。
本文向大家介绍在React中如何避免不必要的render?相关面试题,主要包含被问及在React中如何避免不必要的render?时的应答技巧和注意事项,需要的朋友参考一下 shouldComponentUpdate、memoization、PureComponent
问题内容: 我有按日期排序的旅行数据(大集合)列表。 现有行为 我将所有行程数据存储到SqlLite Db中。对于添加的每个新数据,我通常都会收到fcm通知,并且使用上次更新的时间概念仅同步新添加的数据。这样,当cx打开应用程序时,他将始终从我的数据库中读取数据,从而节省了 读取 和 网络 操作。 如何使用Firestore达到相同的目的? 需要考虑的几个问题: Firestore get()始终
我正在用反应原生构建一个项目。我有一个动态的玩家列表,我希望用户能够编辑。 我想实现的是: 用户输入名称 用户按enter键 我们称之为addPlayer,它添加一个播放器 新的输入出现并得到关注(通过其他功能) 我得到的是: < li >用户输入姓名 < li >用户按enter键 < li >我们调用addPlayer来添加播放器 < li >键盘开始关闭一会儿,然后在新输入出现时重新打开。
我大致了解了TensorFlow图在评估它包含的之一时是如何评估的:该张量的或的执行将触发图中所需的所有级联计算计算该张量的值,因此,图中“导致它”的任何张量也将被计算,并且连接它们的任何操作都将被运行。 因此,如果我有一个包含张量out\u a的图,其计算涉及(可能在许多其他事情中)使用int\u b的操作,这反过来(最终)需要执行本身(最终)使用in的操作 将只评估、和一次:和的计算都使用的相
问题内容: 我有一个,我需要能够对列进行重新排序。但是,我希望第一列不能重新排序。我使用以下命令来启用重新排序: 现在可以对列进行重新排序,包括不需要的第一列。有什么方法可以锁定第一列? 我已经看到一些使用两个表的解决方案,其中第一列在单独的表中,但是也许有更好/更简单的方法。 问题答案: 我认为您需要重写中的方法。在类有一个方法,你应该能够看到,以确定它是否是你的固定列,然后你应该能够取消事件。
条款14:使用reserve来避免不必要的重新分配 关于STL容器,最神奇的事情之一是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)对于vector和string,只要需要更多空间,就以realloc等价的思想来增长。这个类似于realloc的操作有四个部分: 分配新的内存块,它有容器目前容量的几倍。在大部分实现