Подпорка, к которой я могу получить доступ, не может быть предоставлена - PullRequest
0 голосов
/ 09 декабря 2018

Цель моего приложения MERN - получить трехзначный ввод от пользователя и вернуть первое простое число, содержащее эти цифры (например: вы вводите 026, приложение возвращает 10267).Если моя функция checker() находит совпадение, я запускаю updatePrimeNumber(), чтобы обновить переменную "match" этого простого числа в true.База данных обновляется правильно.

Я хочу отобразить все простые числа, у которых "match" равно true.У меня есть реквизит primeNumbers, который содержит все простые числа, которые я ввел в базу данных.Я могу получить доступ к этим числам во всем компоненте, но не могу понять, как отобразить любой из них, правда это или нет.Я получаю сообщение об ошибке: primeNumbers is not defined.

import React, { Component } from 'react';
import gql from "graphql-tag";
import { graphql, compose } from 'react-apollo';

const PrimeNumbersQuery = gql`
{
  primeNumbers {
    id
    text
    match
  }
}
`;

const UpdateMutuation = gql`
  mutation($id: ID!, $match: Boolean!) {
    updatePrimeNumber(id: $id, match: $match)
  }
`;

class Prime extends Component {
  checker = (primes) => {
    let nums = this.props.checkedNumbersFromParent;
    let recentChecked = (nums[nums.length - 1].text);
    let recentCheckedRegExp = new RegExp(recentChecked);
    for (var i in primes) {
      let count = 0;
      if (primes[i].text.search(recentCheckedRegExp) >= 0 && count < 1) {
        this.updatePrimeNumber(primes[i]);
        count = count + 1;
        break;
      }
    }
    return primes;
  }

  updatePrimeNumber = async (primeNumber) => {
    await this.props.updatePrimeNumber({
      variables: {
        id: primeNumber.id,
        match: primeNumber.match
      },
      update: store => {
        const data = store.readQuery({ query: PrimeNumbersQuery });
        data.primeNumbers = data.primeNumbers.map(
          x =>
            x.id === primeNumber.id
            ? {
                ...primeNumber, match: true
              }
            : x
        );
        store.writeQuery({ query: PrimeNumbersQuery, data });
      }
    });
  };

  render() {
    const {data: {loading, primeNumbers}} = this.props;
    this.checker(primeNumbers)
    return (
      <div>
      ***Need to render all primeNumbers with match === true***
      </div>
    );
  }
}

export default compose(
  graphql(UpdateMutuation, {name: 'updatePrimeNumber'}),
  graphql(PrimeNumbersQuery)
)(Prime);

Спасибо всем, кто смотрит на это.Это высоко ценится.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

из какой строки выдается ошибка?

Вы можете попробовать использовать фильтр вместо обновления соответствия в primeNumber.

, чтобы отобразить простые числа вместо Необходимо отобразить все простые числа с соответствием === true цикл через простые числа

0 голосов
/ 09 декабря 2018

О вашей проблеме: primeNumbers не определено. UpdatePrimeNumber является асинхронным, вам нужно сначала проверить его и добавить конструктор к исходному this.props.

 constructor(){
      super(props)
    }
 renderprime(){
    this.checker(this.props.data.primeNumbers)
    if (this.props.data.primeNumbers){
        return (
            <div>
                {this.props.data.primeNumbers.map((item) => {
                    if (item.match){
                        return (
                            <div>
                                <div>{item.id}</div>
                                <div>{item.text}</div>
                            </div>
                        )
                    }
                })}
            </div>
        )
    }
}
...
   <div>
     {this.renderprime()}
  </div>
...