前提
今GraphQLの勉強の一環でGitHub GraphQL APIから値を取得しています。
apolloを使用していますが、その際にuseQuery()のvariablesの値を<button onClick={}>で更新を試みているのですが、うまくいきません
該当のソースコード
jsx
1import React, { Component, useState } from 'react'; 2import { ApolloProvider, useQuery } from '@apollo/react-hooks'; 3import client from './client'; 4import {SEARCH_REPOSITORIES} from './graphql' 5 6const PER_PAGE = 5 7const DEFAULT_STATE = { 8 first: PER_PAGE, 9 after: null, 10 last: null, 11 before: null, 12 query: "フロントエンドエンジニア", 13} 14 15const QueryView = ({ queryVariables }) => { 16 const [stateNext, setGoNext] = useState(queryVariables); 17 const { loading, error, data } = useQuery(SEARCH_REPOSITORIES, { 18 variables: stateNext 19 }); 20 21 if (loading) return <p>Loading...</p>; 22 if (error) return <p>Error : {error.message}</p>; 23 const search = data.search 24 const repositoryCount = search.repositoryCount 25 const repositoryUnit = repositoryCount === 1 ? 'Repository' : 'Repositories' 26 const title = `GitHub Repositories Search Result - ${repositoryCount} ${repositoryUnit}` 27 console.log(stateNext) 28 return ( 29 <div> 30 <h1>{title}</h1> 31 <ul> 32 { 33 search.edges.map(edge => { 34 const node = edge.node 35 return ( 36 <li key={node.id}> 37 <a href={node.url} target="_blank" rel="noopener noreferrer">{node.name}</a> 38 </li> 39 ) 40 }) 41 } 42 </ul> 43 { 44 search.pageInfo.hasNextPage === true ? 45 46 <button onClick={ 47 setGoNext( 48 { 49 ...stateNext, 50 first: PER_PAGE, 51 after: search.pageInfo.endCursor, 52 last: null, 53 before: null 54 } 55 )}>Next</button> 56 : 57 null 58 } 59 </div> 60 ) 61} 62class App extends Component { 63 constructor(props) { 64 super(props) 65 this.state = DEFAULT_STATE 66 67 this.handleChange = this.handleChange.bind(this) 68 this.handleSubmit = this.handleSubmit.bind(this) 69 } 70 handleChange(event) { 71 this.setState( { 72 ...DEFAULT_STATE, 73 query: event.target.value 74 }) 75 } 76 handleSubmit(event) { 77 event.preventDefault(); 78 } 79 render() { 80 const { query, first, last, before, after } = this.state 81 return ( 82 <ApolloProvider client={client} > 83 <h2>Hello, GraphQL</h2> 84 <QueryView queryVariables={{ query, first, last, before, after }} /> 85 <form onSubmit={this.handleSubmit}> 86 <input type="text" value={query} onChange={this.handleChange} /> 87 </form> 88 </ApolloProvider> 89 ) 90 } 91}; 92 93export default App;
実現したいこと
stateNextのafterの値を更新したいです。
いま更新はできているのですが、下記のように<button>をクリックせず更新されてしまいまいた。
この場合何が問題になりますでしょうか?
bash
1App.js:27 {query: "フロントエンドエンジニア", first: 5, last: null, before: null, after: null} 2App.js:27 {query: "フロントエンドエンジニア", first: 5, last: null, before: null, after: "Y3Vyc29yOjU="} 3App.js:27 {query: "フロントエンドエンジニア", first: 5, last: null, before: null, after: "Y3Vyc29yOjEw"} 4App.js:27 {query: "フロントエンドエンジニア", first: 5, last: null, before: null, after: "Y3Vyc29yOjE1"} 5App.js:27 {query: "フロントエンドエンジニア", first: 5, last: null, before: null, after: "Y3Vyc29yOjIw"} 6App.js:27 {query: "フロントエンドエンジニア", first: 5, last: null, before: null, after: "Y3Vyc29yOjI1"}
補足情報(FW/ツールのバージョンなど)
package.jsonはこちらになります。
json
1 "dependencies": { 2 "@apollo/react-hooks": "^3.1.3", 3 "@testing-library/jest-dom": "^4.2.4", 4 "@testing-library/react": "^9.3.2", 5 "@testing-library/user-event": "^7.1.2", 6 "apollo-boost": "^0.4.7", 7 "graphql": "^14.6.0", 8 "react": "^16.12.0", 9 "react-dom": "^16.12.0", 10 "react-scripts": "3.4.0" 11 },
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。