ReactJS / Javascript / Graphql / React-apollo:传递查询变量

时间:2018-08-20 00:09:40

标签: reactjs react-native graphql apollo react-apollo

我试图弄清楚如何将输入变量传递给graphql查询函数以运行查询并显示结果。不知道单击按钮时我传递的变量是否正确。 getObjectQuery带有两个变量startTime和endTime,这两个变量将由用户在前端选择。

父项:

class Calendar extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
          startTime: '',//This will keep track of the time
          endTime:'',


        };

        this.handleSubmit = this.handleSubmit.bind(this);

      }



      handleSubmit = event => {
        event.preventDefault();

        console.log(this.state.startTime);
        this.setState({
          startTime: new Date(document.getElementById("startTime").value).valueOf(),//getElementById is a jQuery method
          endTime: new Date(document.getElementById("endTime").value).valueOf()
        }, () => {
          this.props.data.refetch({//Assign the inputvalues, which is the current state, to the variables after pressing the submit button
            startTime: this.state.startTime,
            endTime:this.state.endTime
          });
          console.log(this.state.startTime);
          console.log(this.state.endTime);
        });
      };

      render() {

        console.log(this.props.data);//This is where data is.
        return (
          <div className="Calendar">
            <form onSubmit={this.handleSubmit.bind(this)}>
              <label>Start Time</label>
              <input type="datetime-local" id="startTime" step="1" />              



              <label>End Time</label>
              <input type="datetime-local" id="endTime" step="1" onSubmit={this.handleSubmit.bind(this)}/>
              <input type="submit" value="Submit" />

            </form>

            {<ElementList startTime={this.state.startTime} endTime={this.state.endTime}/>}
          </div>

        );
      }
};
export default graphql(getObjectsQuery, 
  { options: (ownProps) => { 
    console.log(ownProps.startTime); 
    return ({ variables: { startTime: ownProps.startTime,
                            endTime: ownProps.endTime
     } }) 
  } } )(Calendar);

子功能

const ElementList = (props) => (
  <Query
    query={getObjectsQuery}
    variables={props.startTime, props.endTime}
  >
    {({ loading, error, data }) => {
      if (loading) return <p>Loading...</p>;
      if (error) return <p>Error</p>;




          return (
            <Item.Group divided>
              {data.action.map(action =>
                <div>
                  <ul>
                  <li>{action.action}</li>
                  <li>{action.timestamp}</li>
                  <ul>
                  {action.object.map( (obj) => {
                    return (<li>{obj.filename}</li>)
                  })}
                  </ul>
                  </ul>
                </div>
              )}

              </Item.Group>


            );

        }}


  </Query>
);

export default ElementList;

1 个答案:

答案 0 :(得分:0)

我相信您的问题可能是您只是将prop作为变量传递。需要将它们设置为特定的属性名称,以便您的graphql解析器接受它们。

variables={{start: props.startTime, end: props.endTime}}