获取函数被调用两次
Fetch function is called twice
我在一个名为 fetching.js
的文件中使用提取函数从 GraphQL 服务器请求数据,如下所示。但是,fetchQuery() 被调用了两次。
module.exports = {
fetchQuery: function(query){
console.log("fetchQuery started")
return fetch('http://localhost:4000/', {
method: 'POST',
headers: {"Content-Type": "application/json"},
body: JSON.stringify({
query: query
})
}).then(res => {
return res.json()
})
},
B: function(){
console.log("This is function B. This is just a test.")
}
}
这就是我调用 fetchQuery() 的方式。我试图将 JSON 数据渲染到导航栏中。这是到目前为止的代码。
import React from 'react'
import '../App.css';
import {fetchQuery} from '../fetching'
function NavBar() {
fetchQuery(`
query{
categories{
name
}
}
`).then(data => {
const tab = document.createElement('a')
tab.innerText = data.data.categories[0].name
tab.href = "/" + tab.innerText
const leftSide = document.getElementById('leftNavElements')
tab.innerText = data.data.categories[0].name
leftSide.append(tab)
})
return (
<div className = "NavBar">
<div className = "leftSide" id = "leftNav">
<div className = "links" id="leftNavElements" >
<a href = "/">ALL</a>
</div>
</div>
<div className = "centerSide">
Logo
</div>
<div className = "rightSide">
Cart & Currency Change
</div>
</div>
);
}
export default NavBar;
请告诉我如何解决该错误
使用像 document.createElement()
这样的原生 dom 操作在 React 中是一种不好的做法。
无论如何,将您的 fetchQuery 包装在 useEffect 中应该可以解决您的问题:
import { useEffect } from 'react'
useEffect(() => {
fetchQuery(`
query{
categories{
name
}
}
`).then(data => {
const tab = document.createElement('a')
tab.innerText = data.data.categories[0].name
tab.href = "/" + tab.innerText
const leftSide = document.getElementById('leftNavElements')
tab.innerText = data.data.categories[0].name
leftSide.append(tab)
})
, [])
我在一个名为 fetching.js
的文件中使用提取函数从 GraphQL 服务器请求数据,如下所示。但是,fetchQuery() 被调用了两次。
module.exports = {
fetchQuery: function(query){
console.log("fetchQuery started")
return fetch('http://localhost:4000/', {
method: 'POST',
headers: {"Content-Type": "application/json"},
body: JSON.stringify({
query: query
})
}).then(res => {
return res.json()
})
},
B: function(){
console.log("This is function B. This is just a test.")
}
}
这就是我调用 fetchQuery() 的方式。我试图将 JSON 数据渲染到导航栏中。这是到目前为止的代码。
import React from 'react'
import '../App.css';
import {fetchQuery} from '../fetching'
function NavBar() {
fetchQuery(`
query{
categories{
name
}
}
`).then(data => {
const tab = document.createElement('a')
tab.innerText = data.data.categories[0].name
tab.href = "/" + tab.innerText
const leftSide = document.getElementById('leftNavElements')
tab.innerText = data.data.categories[0].name
leftSide.append(tab)
})
return (
<div className = "NavBar">
<div className = "leftSide" id = "leftNav">
<div className = "links" id="leftNavElements" >
<a href = "/">ALL</a>
</div>
</div>
<div className = "centerSide">
Logo
</div>
<div className = "rightSide">
Cart & Currency Change
</div>
</div>
);
}
export default NavBar;
请告诉我如何解决该错误
使用像 document.createElement()
这样的原生 dom 操作在 React 中是一种不好的做法。
无论如何,将您的 fetchQuery 包装在 useEffect 中应该可以解决您的问题:
import { useEffect } from 'react'
useEffect(() => {
fetchQuery(`
query{
categories{
name
}
}
`).then(data => {
const tab = document.createElement('a')
tab.innerText = data.data.categories[0].name
tab.href = "/" + tab.innerText
const leftSide = document.getElementById('leftNavElements')
tab.innerText = data.data.categories[0].name
leftSide.append(tab)
})
, [])