我的checker()
函数确定用户输入(checkedNumber)在我的质数数据库中是否匹配。如果存在,我需要运行updateCheckedNumber()
,以便用该素数更新checkedNumber.matchingPrime
。我不知道如何将素数传递给突变。
这是我组件的代码。目前,我正在对matchingPrime
进行硬编码以将其更新为“ 100”。这可以正确反映在数据库中。
class Prime extends Component {
updateCheckedNumber = async (checkedNumber) => {
await this.props.updateCheckedNumber({
variables: {
id: checkedNumber.id,
matchingPrime: checkedNumber.matchingPrime
},
update: store => {
const data = store.readQuery({ query: CheckedNumbersQuery });
data.checkedNumbers = data.checkedNumbers.map(
x =>
x.id === checkedNumber.id
? {
...checkedNumber, matchingPrime: "100"
}
: x
);
store.writeQuery({ query: CheckedNumbersQuery, data });
}
})
}
checker = () => {
let primes = (this.props.data.primeNumbers)
let nums = this.props.checkedNumbersFromParent;
let recentCheckedObject = (nums[nums.length - 1]);
let recentCheckedNumber = (nums[nums.length - 1].text);
let recentCheckedRegExp = new RegExp(recentCheckedNumber);
for (var i in primes) {
let count = 0;
if (primes[i].text.search(recentCheckedRegExp) >= 0 && count < 1) {
count = count + 1;
this.updateCheckedNumber(recentCheckedObject);
}
}
}
这是服务器端的解析器:
const resolvers = {
Query: {
primeNumbers: () => PrimeNumber.find(),
checkedNumbers: () => CheckedNumber.find()
},
Mutation: {
createCheckedNumber: async (_, {text}) => {
const checkedNumber = new CheckedNumber({text, matchingPrime: "nada"});
await checkedNumber.save();
return checkedNumber;
},
updateCheckedNumber: async (_, {id, matchingPrime}) => {
await CheckedNumber.findByIdAndUpdate(id, {matchingPrime});
return true;
},
非常感谢您关注此内容。
答案 0 :(得分:0)
我看到您有一个解析器,但没有看到您的updateCheckedNumber
解析器的架构。根据您的解析器,我们可以制作一个如下的架构:
##updateCheckedNumber.graphql
type Prime {
id: String
value: Number
}
type Mutation {
updateCheckedNumber(id: String!, matchingPrime: Number!): Prime
}
现在您将需要一个查询字符串,您可以将其作为道具传递到您的react组件中。我们可以使用gql
中的graphql-tag
进行以下操作:
const updateCheckedNumber = gql`
mutation updateCheckedNumber($id: String!, $matchingPrime: Number!) {
updateCheckedNumber(id: $id, matchingPrime: $matchingPrime) {
id,
value
}
}
`
现在,我们需要使用graphql
中的react-apollo
来包装react组件,如下所示:
export default graphql(updateCheckedNumber, {
name: 'updateCheckedNumber'
})(MyReactComponent)
现在在您的react组件内部,您可以访问props.updateCheckedNumber
并按如下方式调用它:
props.updateCheckedNumber({
variables: {
id: theId,
matchingPrime: theCheckedNumber
}
})
希望这会有所帮助!
P.S。如果您有一个查询,该查询为您提供了质数列表,例如primeNumbers
,则需要在graphql
调用的选项中进行refetchQueries。或手动更新您的InMemoryCache
。