- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 discord/slack 克隆。我有 channel 、消息和用户。一旦加载了我的聊天组件,就会使用来自 Apollo 的 useQuery
Hook 获取 channel 。
默认情况下,当用户访问聊天组件时,他需要单击特定 channel 才能查看有关该 channel 的信息以及消息。
在较小的 Channel.js 组件中,我将点击 channel 的 channel ID 写入 apollo-cache。这很完美,我在 Messages.js 组件中使用 useQuery
Hook @client 从缓存中获取 channelid,它运行得很完美。
当我使用 useLazyQuery
Hook 获取特定 channel (用户点击的 channel )的消息时出现问题。
它会导致 React 中的无限重新渲染循环,从而导致应用程序崩溃。
我已经尝试使用带有 skip 选项的普通 useQuery
Hook 。然后,我会在需要时调用 refetch()
函数。从某种意义上说,这种“有效”不会给我无限循环。但是 console.log()
给我这个错误:[GraphQL error]: Message: Variable "$channelid"of required type "String!"没有提供。路径:未定义
。这很奇怪,因为我的模式和变量是正确的??
如前所述,useLazyQuery 确实给了我无限循环。
我真的在与 apollo/react hooks 的条件性作斗争......
///Channel.js 组件///
const Channel = ({ id, channelName, channelDescription, authorName }) => {
const chatContext = useContext(ChatContext);
const client = useApolloClient();
const { fetchChannelInfo, setCurrentChannel } = chatContext;
const selectChannel = (e, id) => {
fetchChannelInfo(true);
const currentChannel = {
channelid: id,
channelName,
channelDescription,
authorName
};
setCurrentChannel(currentChannel);
client.writeData({
data: {
channelid: id
}
});
// console.log(currentChannel);
};
return (
<ChannelNameAndLogo onClick={e => selectChannel(e, id)}>
<ChannelLogo className='fab fa-slack-hash' />
<ChannelName>{channelName}</ChannelName>
</ChannelNameAndLogo>
);
};
export default Channel;
///Messages.js 组件///
const FETCH_CHANNELID = gql`
{
channelid @client
}
`;
const Messages = () => {
const [messageContent, setMessageContent] = useState('');
const chatContext = useContext(ChatContext);
const { currentChannel } = chatContext;
// const { data, loading, refetch } = useQuery(FETCH_MESSAGES, {
// skip: true
// });
const { data: channelidData, loading: channelidLoading } = useQuery(
FETCH_CHANNELID
);
const [fetchMessages, { data, called, loading, error }] = useLazyQuery(
FETCH_MESSAGES
);
//// useMutation is working
const [
createMessage,
{ data: MessageData, loading: MessageLoading }
] = useMutation(CREATE_MESSAGE);
if (channelidLoading && !channelidData) {
console.log('loading');
setInterval(() => {
console.log('loading ...');
}, 1000);
} else if (!channelidLoading && channelidData) {
console.log('not loading anymore...');
console.log(channelidData.channelid);
fetchMessages({ variables: { channelid: channelidData.channelid } });
console.log(data);
}
我希望在来自 useLazyQuery 的数据中有消息......但是在 console.log() 中得到这个:
react-dom.development.js:16408 未捕获的不变违规:重新渲染太多。 React 限制渲染次数以防止无限循环。
最佳答案
您可以使用 useLazyQuery
返回的 called
变量。
!called && fetchMessages({ variables: { channelid: channelidData.channelid } });
关于reactjs - useLazyQuery 导致太多重新渲染 [Apollo/apollo/react hooks],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57784602/
要求: 我想在 useEffect 中第一次自动调用查询,然后在函数中手动调用。 Issue: Invarient Violation: Too many re-renders. const [ge
我正在使用 useLazyQuery单击按钮时触发查询。查询被调用一次后,结果(数据、错误等)会在每次渲染时传递给组件渲染。例如,当用户输入新的文本输入来更改导致错误的原因时,这是有问题的:错误消息不
我需要在按下提交按钮时调用查询,然后处理响应。 我需要这样的东西: const [checkEmail] = useLazyQuery(CHECK_EMAIL) const handleSubmit
使用来自 @apollo/react-hooks 的 useLazyQuery() Hook ,我能够通过单击按钮来执行查询。但我无法使用它在连续点击时执行相同的查询。 export default
在下面的代码中,永远不会触发 checkme() import { useMutation, useLazyQuery } from '@apollo/react-hooks'; import { L
我有一个 Feed 列表组件,我在它的上方有一个搜索输入组件。这两个组件都使用 useLazyQuery Hook 。const [getFeedPosts, { data, loading, err
目前我有一个 useLazyQuery按下按钮时触发的钩子(Hook)(搜索表单的一部分)。 钩子(Hook)行为正常,只有在按下按钮时才会触发。但是,一旦我触发它一次,它就会在每次组件重新呈现时触发
我正在使用 @apollo/client 在我的应用程序中构建忘记的功能useLazyQuery Hook 。当我第一次单击按钮时,它会发送电子邮件并调用后端 API,但第二次单击等等.. 它只会返回
我的数据库存储项目列表。我编写了一个查询,每次单击按钮时从列表中随机返回一个项目。我使用 useLazyQuery 并调用返回的函数来执行查询,它工作正常。我可以在随后的按钮按下时调用 refetch
我正在构建一个 discord/slack 克隆。我有 channel 、消息和用户。一旦加载了我的聊天组件,就会使用来自 Apollo 的 useQuery Hook 获取 channel 。 默认
我正在构建一个 discord/slack 克隆。我有 channel 、消息和用户。一旦加载了我的聊天组件,就会使用来自 Apollo 的 useQuery Hook 获取 channel 。 默认
我正在浏览 Apollo React hooks 的文档。 并且看到有两个查询钩子(Hook)可用于 useQuery和 useLazyQuery我正在阅读这一页。 https://www.apoll
我有一个用于 apollo 惰性查询的自定义去抖钩子(Hook): import {useLazyQuery} from '@apollo/react-hooks'; import debounce
我有一个用 tsx 编写的页面,在加载时不断崩溃,并出现错误 client.watchQuery cannot be called with fetchPolicy set to "standby"
我是一名优秀的程序员,十分优秀!