我创建了一个由Apollo客户端和graphQL驱动的react应用程序
定义了我的架构,因此预期结果是一个对象数组(<代码>[{名称:“metric 1”,类型:“type A”},{名称:“metric 2”,类型:“type B”})])
在jsx文件中,我定义了以下查询:
query metrics($id: String!) {
metrics(id: $id) {
type
name
}
}`;
我用Apollo HOC包装了组件,如下所示:
export default graphql(metricsQuery, {
options: (ownProps) => {
return {
variables: {id: ownProps.id}
}
}
})(MetricsComp);
Apollo客户端工作正常,并在渲染方法中返回道具的预期列表。
我想让用户在客户机上操纵结果(编辑/删除列表中的指标,不需要改变服务器上的实际数据)。然而,由于结果在组件道具上,我必须将它们移动到状态,以便能够变异。如何将结果移动到状态而不引起无限循环?
您可以使用这个:
import {useState} from 'react';
import {useQuery} from '@apollo/client';
const [metrics,setMetrics]=useState();
useQuery(metricsQuery,{
variables:{id: ownProps.id},
onCompleted({metrics}){
setMetrics(metrics);
}
});
组件WillReceiveProps将很快被弃用(参考链接)
如果您使用的是React 16,则可以执行以下操作:
class DemoClass extends Component {
state = {
demoState: null // This is the state value which is dependent on props
}
render() {
...
}
}
DemoClass.propTypes = {
demoProp: PropTypes.any.isRequired, // This prop will be set as state of the component (demoState)
}
DemoClass.getDerivedStateFromProps = (props, state) => {
if (state.demoState === null && props.demoProp) {
return {
demoState: props.demoProp,
}
}
return null;
}
您可以通过阅读以下内容了解更多信息:link 1, link 2
如果apollo在这件事上像中继一样工作,您可以尝试使用组件WillReceiveProps
:
class ... extends Component {
componentWillReceiveProps({ metrics }) {
if(metrics) {
this.setState({
metrics,
})
}
}
}
像这样的。
我的用途是case是一个map组件。我只希望当用户按下按钮时加载标记的数据,但不是在初始组件安装或位置改变时。 下面的代码示例:
问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作
我的任务是用hibernate的数据值填充prime faces数据表。我们可以通过这个查询获取表中的所有记录 将从表雇员中获取所有记录,雇员字段有两个字段名称,以及将其转换为列表的Hibernate查询 列表=查询。list();我想将其转换为数组列表,其中包含两个字段name,age和hibernate中的所有对象 然后用 有人能举例说明吗
问题内容: 在Apollo React文档http://dev.apollodata.com/react/queries.html#basics中,有显示组件时自动获取的示例,但是我想在单击按钮时运行查询。我看到一个在单击按钮时“重新”获取查询的示例,但我不希望它最初进行查询。我看到有一种方法可以调用变异,但是如何调用查询呢? 问题答案: 您可以通过使用高阶组件传递对Apollo客户端的引用来实现
假设Component-TODOList需要以两种不同的方式显示TODO的列表,listview和gridview。假设我想保持两个视图作为不同的组件,那么最佳实践是什么- > 使用graphql查询创建TodoList组件,然后将查询结果传递给TODOListView和TODOGridView组件? 创建没有graphql查询的TodoList组件,然后在ToDoListView和TODOGri
我们这样实现了graphql api响应。 如果我通过graphiql查询我们的api,响应看起来像预期的那样。但不幸的是,我们应用程序中的apollo客户机从返回对象中剥离了除之外的所有属性。 这是意料之中的行为吗?如果是这样,我如何改变它或以不同的方式解决这个问题。我需要得到相应地实现分页的数据总量。 我知道有一个带有的方法,但它不会告诉我列表中条目的全部数量。