reactjs - 如何在react js中使用从useQuery获得的graphql枚举进行表单竞争?
问题描述
我使用 React,apollo graphql。我正在尝试使用自省查询通过 graphql 枚举在表单中添加医生的指定。
我有一个代表医生指定的 graphql 枚举类型,我正在使用useQuery来显示它。我想要做的是将从此useQuery获得的枚举数据使用到表单中(在组件 AddDoctor 中)。但我总是收到 null(数据未定义)错误“ Uncaught TypeError: Cannot read property 'map' of null ”。
这是我的片段:
枚举类型
enum DesignationType{
Podiatrist
GeneralPractitioner
Pediatrician
Endocrinologist
}
添加GQL.js
export const ADD_DOCTOR_MUTATION = gql`
mutation addDoctors($name: String!, $designation:DesignationType! ) {
addDoctors(
name: $name,
designation: $designation
) {
_id
name
designation
}
}
`
AddDoctor.js
const AddDoctor = () => {
const DESIGNATION_QUERY = gql`
query GetEnum {
__type(name: "DesignationType") {
enumValues {
name
}
}
}
`
const { data, loading } = useQuery(DESIGNATION_QUERY);
const enumValues = loading ? null : data.__type.enumValues;
const [formState, setFormState] = useState({
name: '',
designation: ''
});
const [addDoctors] = useMutation(ADD_DOCTOR_MUTATION,{
variables:{
name: formState.name,
designation: enumValues
}
});
return (
<form
onSubmit = {async (e)=>{
e.preventDefault();
await addDoctors();
}}>
<div>
<label> Name: </label>
<input type ='text'
value = {formState.name}
onChange={(e)=>
setFormState({
...formState,
name: e.target.value
})
}
placeholder = 'name'/>
</div>
<div>
<label>Designation: </label>
<select>
{enumValues.map(enumValue => (
<option value={enumValue.name}>{enumValue.name}</option>
))}
</select>
</div>
<button type = "submit">Add Doctor</button>
</form>
)
}
我也尝试useEffect
在此链接中使用如何正确链接 GraphQL 中的 useQuery 和 useMutation?,但我无法正确使用 useEffect 。任何人都可以让我知道,我如何使用要在表单中使用的枚举值来添加名称?提前致谢 !
解决方案
推荐阅读
- angular - 返回修改后的 Observable 值 Angular 6
- php - 如何在php中获取请求发送服务器域
- python-3.x - 如何将 .dat 文件浮点值读取为浮点而不是对象
- java - artifact:pom 命令在一个工作区中无法识别,但在另一个工作区中无法识别
- javascript - 如何在 chrome 中创建一个书签,它会弹出一个附加 URL 的弹出窗口?
- content-management-system - 如何访问 Kentico 中已编辑 CMS 页面的修订历史?
- c# - 在 C# 方法中作为参数传递的注释?
- python-3.x - Discord Bot 游戏表情符号
- javascript - 有没有一种正确的方法来解析带有 JavaScript 循环的 JSON?
- android - React Native 错误:在 android 版本 APK 中重复资源、资产进入某些屏幕而其他屏幕没有出现