Javascript 盖茨比图
我试图通过一个增加state.count的按钮从graphql中翻阅Gatsby中react组件中的数据 单击按钮时,state.count将递增,但不会传递给查询 你知道我做错了什么吗Javascript 盖茨比图,javascript,reactjs,graphql,gatsby,Javascript,Reactjs,Graphql,Gatsby,我试图通过一个增加state.count的按钮从graphql中翻阅Gatsby中react组件中的数据 单击按钮时,state.count将递增,但不会传递给查询 你知道我做错了什么吗 pageUp=() => { this.setState({count: this.state.count +2}); let skip=this.state.count } render() { return ( <StaticQuery query={graphql`
pageUp=() => {
this.setState({count: this.state.count +2});
let skip=this.state.count
}
render() {
return (
<StaticQuery
query={graphql`
query ListingPageQuery ($skip:Int){
allMarkdownRemark(
limit:2
skip: $skip
)
{
...
}
}
`
}...
pageUp=()=>{
this.setState({count:this.state.count+2});
让跳过=this.state.count
}
render(){
返回(
我在这段代码中看到两个问题。首先:
pageUp=() => {
let skip=this.state.count
}
let
语句会使skip
变量成为此函数的局部变量。从您的问题来看,是什么原因导致它传递到GraphQL查询并不明显,但如果它是成员变量或其他内容,则此语句会将其隐藏,并且您正在设置一个状态将丢失的纯局部变量
第二:
this.setState({count: this.state.count +2});
let skip=this.state.count
,React文档特别建议不要以现有方式更改状态(有一种更合适的基于回调的模式)。这样做的另一个后果是,当您到达下一行时,状态可能没有实际更新,因此您正在从“旧”中分配count
将状态设置为skip
变量
查看盖茨比文档,有一个特别的注意事项,尽管浏览它并没有建议另一条路径(显示可能分页的数据的每个示例只显示第一页。)我在这段代码中看到两个问题。首先:
pageUp=() => {
let skip=this.state.count
}
let
语句会使skip
变量成为此函数的局部变量。从您的问题来看,是什么原因导致它传递到GraphQL查询并不明显,但如果它是成员变量或其他内容,则此语句会将其隐藏,并且您正在设置一个状态将丢失的纯局部变量
第二:
this.setState({count: this.state.count +2});
let skip=this.state.count
,React文档特别建议不要以现有方式更改状态(有一种更合适的基于回调的模式)。这样做的另一个后果是,当您到达下一行时,状态可能没有实际更新,因此您正在从“旧”中分配count
将状态设置为skip
变量
查看盖茨比文档,有一个特别的注意事项,尽管浏览它并不会建议另一条路径(显示可能分页的数据的每个示例只显示第一页)使用盖茨比无法做到这一点。GraphQL只在构建时发生,而不是在客户端上发生。您需要获取所有内容,然后使用JS只显示/跳过要显示的内容
查看Gatsby文档,有一个特别的注意事项是StaticQuery不支持GraphQL变量,尽管浏览它并不建议另一个支持该变量的路径
此外,正如David Maze所说,StaticQuery不支持此类变量。这在普通查询中也不起作用,因为此类变量需要通过上下文传递。
只有通过上下文传递它,它才能在pageContext
中使用,并作为查询中的变量(通常用于模板)。使用盖茨比无法做到这一点。GraphQL只在构建时发生,而不是在客户端上。您需要获取所有内容,然后使用JS仅显示/跳过您想要显示的内容
查看Gatsby文档,有一个特别的注意事项是StaticQuery不支持GraphQL变量,尽管浏览它并不建议另一个支持该变量的路径
此外,正如David Maze所说,StaticQuery不支持此类变量。这在普通查询中也不起作用,因为此类变量需要通过上下文传递。
只有通过上下文传递时,它才能在pageContext
中使用,并作为查询中的变量(通常用于模板)。setState()是异步的。捕获状态的正确方法是在回调中,也可以使用prev
参数引用setState()中的状态:
引用:setState()是异步的。捕获状态的正确方法是在回调中,也可以使用prev
参数引用setState()中的状态:
参考资料:谢谢DavidMaze。非常好的建议,谢谢。我将在状态更新中处理回调问题,但对我来说更大的问题是您和@lekoarts指出的关于staticqueries的问题-盖茨比如何将分页数据拉入非页面组件。在我当前的使用案例中,不会有数百个博客,因此我可以拉它们都出来了,然后分块显示出来。谢谢DavidMaze。非常好的建议谢谢。我将在状态更新时处理回调,但对我来说更大的问题是您和@lekoarts指出的关于静态查询的问题-盖茨比如何将分页数据拉入非页面组件。在我当前的用例中,不会有hundreds的博客,这样我就可以把它们全部拉出来,然后把它们分块展示。再次感谢@lekoarts的伟大建议。正如我上面提到的,我正在努力解决如何做到这一点,即使我使用了上下文-大多数例子都是关于构建“页面”但我只想在一个组件上创建分页记录。我真的需要把整个数据集拉回来,然后分块显示吗?我不太清楚你的用例,但有分页插件和在线文章,展示了如何创建分页。这一切都发生在gatsby node.js
中,不过这些页面将在bui创建ld时间。再次感谢@lekoarts的伟大建议。正如我前面提到的,我正在努力解决如何做到这一点,即使我使用了上下文-大多数示例都是关于构建“页面”但我只想在一个组件上创建分页记录。我真的需要把整个数据集拉回来,然后分块显示吗?我不太清楚你的用例,但有分页插件和在线文章,展示了如何创建分页。这一切都发生在gatsby node.js
中,尽管如此