当前位置: 首页 > 知识库问答 >
问题:

无法使用Apollo筛选GraphQL查询并显示数据库数据对象

姬俊驰
2023-03-14

我试图在react中使用表单输入,用graphql和apollo过滤我的mongodb数据库。我有后端设置和工作。我的前端大部分工作正常,但我无法在apollo查询中访问数据。不确定我遗漏了什么,所以不确定要问的确切问题。我只是在做一个搜索或查询,而不是变异。我的React应用程序中有3个组件,我正在使用样式化的组件。我只想捕获表单输入数据并将其存储在apollo查询中以供使用。我想打电话

我知道这是一个堆积如山的问题,所以如果你帮不上忙,也许你可以给我一些建议,告诉我如何更好地分小块提问。谢谢

一个pp.js

import React, { Component } from 'react'
import ApolloClient from 'apollo-boost'
import { ApolloProvider } from 'react-apollo'
import { BrowserRouter as Router, Route, Switch } from 'react-route-dom'

import Home from './components/Home'
import Herb from './components/Herb'

const client = new ApolloClient({
 uri: 'http://localhost:4000/graphql',
})

export default class App extends Component {
 render() {
   return (
    <ApolloProvider client={client}>
     <Router>
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/:herbId" component={Herb} />
      </Switch>
     </Router>
    </ApolloProvider>
  )
 }
}

家js公司

import React, { Component } from 'react'
import styled from 'styled-components'

import SearchInput from './Search'
import Herb from './Herb'
import bgImage from '../Elements/images/measure_colorized.jpg'

const HomeContainer = styled.div`
  width: 100vw;
  height: 100vh;
  background: url(${bgImage});
  background-size: cover;
  background-repeat: no-repeat;
`

const Title = styled.h1`
  font-size: 6rem;
  color: #fff;
`

export default class Home extends Component {
  state = { name: '' }

  handleInput = e => {
    const formData = {}
    formData[e.target.name] = e.target.value
    this.setState({ ...formData })
  }

  render() {
    const { name } = this.state
    return (
      <HomeContainer>
        <header>
          <Title>Measure App</Title>
        </header>
        <SearchInput name={name} onChangeValue={this.handleInput} />
        <Herb name={name} />
      </HomeContainer>
    )
  }
}

Search.js

import React, { Component, Fragment } from 'react'
import styled from 'styled-components'
import { Query } from 'react-apollo'
import gql from 'graphql-tag'

const SearchInput = styled.input`
  background: rgba(0, 0, 0, 0.6);
  width: 30vw;
  padding: 1rem;
  font-size: 1.6rem;
  color: white;
  border: none;
`

const SubmitBTN = styled.button`
  padding: 1rem;
  font-size: 1.6rem;
  border: none;
  background: #7ff2ca;
`

export default class Search extends Component {
  handleSubmit = e => {
    e.preventDefault()
  }

  render() {
    const { name, onChangeValue } = this.props
    return (
      <div>
        <Query query={GET_HERB_QUERY} variables={{ name }}>
          {(data, loading, error) => {
            if (loading) return 'Loading...'
            if (error) return `Error: ${error.message}`
            console.log(data)
            return (
              <Fragment>
                <SearchInput
                  name="name"
                  type="text"
                  placeholder="search"
                  value={name}
                  onChange={onChangeValue}
                />
                <SubmitBTN onClick={this.handleSubmit}>convert</SubmitBTN>
              </Fragment>
            )
          }}
        </Query>
      </div>
    )
  }
}

//writing query to fetch herb that matches search result
const GET_HERB_QUERY = gql`
  query searchHerbs($name: String) {
    herb(name: $name) {
      name
      description
      imageURL
    }
  }
`

共有1个答案

姚棋
2023-03-14

如注释中所述,当您使用查询包装组件时,当组件呈现时,将触发查询。

您可以根据需要手动启动查询和管理数据。您还可以使用refetch方法,使用包装器再次使用不同的变量触发查询。

 类似资料:
  • 本文向大家介绍Python flask框架实现查询数据库并显示数据,包括了Python flask框架实现查询数据库并显示数据的使用技巧和注意事项,需要的朋友参考一下 首先数据库长这样 我们想将name和age列显示到web页面 上代码sqlshowweb.py index.html 运行结果 代码在git上https://github.com/qingnvsue/flask的sql文件夹 以上就

  • 该库只支持Double、Boolean和String。我现在真困惑。怎么可能?

  • 这一组数据在进行groupby前已经完成筛选,但进行groupby聚合后的结果显示是利用未筛选的数据进行的聚合,就像下面的结果,在groupby前已经完成点击量非0过滤,但最后仍存在含0的资源,询问chatGPT给的方案是可能用索引前的数据进行的聚合,重置索引后仍无法解决,请教大牛是否遇到过类似的问题,虽然可以在聚合后重新进行filter过滤,但这个问题搞得很焦灼 代码源文本

  • 我正在尝试获取消息的地图,作者id键如下: 这是我尝试过的: MessageViewModel.getAll()方法返回: 然后我将其转换为一个可流动的流(Flowable::fromIterable),这样它可以一次发出一个项目,而不是整个列表,然后我使用“toMultiMap”进行映射 on成功方法从不被调用,我不知道这里出了什么问题。如果我不使用toMultiMap(并对代码进行相应的修改)

  • 我正在为我的Web应用程序使用Spring MVC和HiberNate。我正在寻找一种方法来创建一种全局Hibernate过滤器,该过滤器将应用于我的DAO类中的每个查询,而不必在每个DAO方法中显式启用它。 要求按用户选择的会话变量过滤记录。因此,我们的查询参数将保存在会话中,该会话中的所有DAO查询都需要通过该变量过滤结果。这里的目的是避免每个DAO方法中的所有可重复过滤代码。 欢迎任何想法!

  • 嗨,我需要同时显示xml和json数据。我可以通过JaxB在本地看到这一点,但在服务器上看不到相同的代码。当我把它部署到服务器时,我得到了这个错误。我不知道如何解决这个错误。无法解决这一点,尝试了很多但没有发生,在本地一切都很好,但当涉及到服务器它显示不同的异常。 错误500:org.springframework.web.util.NestedServletException:请求处理失败;嵌套