[英]Gatsby Graphql Skip
我正在尝试通过增加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`
query ListingPageQuery ($skip:Int){
allMarkdownRemark(
limit:2
skip: $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
变量。
查看Gatsby文档时,需要特别注意的是, StaticQuery不支持GraphQL变量 ,尽管浏览它并不建议使用另一条路径。 (每个显示潜在分页数据的示例都只显示第一页。)
您无法通过盖茨比做到这一点。 GraphQL仅在构建时发生,而不在客户端上发生。 您想要获取所有内容,然后使用JS仅显示/跳过要显示的内容。
查看Gatsby文档时,需要特别注意的是,StaticQuery不支持GraphQL变量,尽管浏览它并不建议使用另一条路径。
此外,正如David Maze所说,StaticQuery不支持此类变量。 这在普通查询中也不起作用,因为此类变量需要通过上下文传递。 https://next.gatsbyjs.org/docs/creating-and-modifying-pages/
仅当您通过上下文传递它时,它才可以在pageContext
使用,并且可以在查询中用作变量(通常将其用于模板)。
setState()是异步的。 捕获状态的正确方法是在回调中,还可以使用prev
参数在setState()中引用状态:
this.setState(prev => ({
count: prev.count + 2
}), () => {
// here this.state.count was updated and safe to use
});
参考: https : //reactjs.org/docs/react-component.html#setstate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.