javascript - 如何使用反应钩子形式根据房间过滤数据数组学生
问题描述
索引.tsx
data = {
room: [
{
id: 1,
name: 'room1'
},
{
id: 2,
name: 'room2'
},
{
id: 3,
name: 'room3'
}
],
student: [
{
id: 1,
room: 'room1',
name: 'josh'
},
{
id: 2,
room: 'room1',
name: 'jake'
}
]
}
const _ROOM = data['room'];
const _STUDENT = data['student'];
const form = {
config: [
{
label: "Room",
name: "room",
type: "select",
rule: yup.string().required(),
renderer: (data: any) => {
const { control, register, errors } = useFormContext();
return (
<SelectPicker
placeholder="Room"
data={
_ROOM && _ROOM.length > 0 ?
_ROOM.map(x => ({ label: x.name, value: x.id })) : []
}
style={{ width: '100%' }}
onChange={(val) => {
control.setValue('room', val);
}}
value={control.getValues()['room']}
/>
);
}
},
{
label: "Student",
name: "student",
type: "select",
rule: yup.string().required(),
renderer: (data: any) => {
const { control, register, errors } = useFormContext();
return (
<SelectPicker
placeholder="Student"
data={
_STUDENT && _STUDENT.length > 0 ?
_STUDENT.map(x => ({ label: x.name, value: x.id })) : []
}
style={{ width: '100%' }}
onChange={(val) => control.setValue('student', val)}
value={control.getValues()['student']}
/>
);
}
}]}
如何根据房间过滤学生。例如,我room1
在学生上选择 then ,它将过滤它具有的价值room1
。我尝试在房间的 onchange 中进行过滤,但它也不起作用,也没有过滤或显示控制台日志。我也使用了状态然后在 onChange 中设置,但它也不起作用。
解决方案
看看这个:https ://react-hook-form.com/advanced-usage/#ConditionalControlledComponent
基本上,您可以观察更改room
并过滤掉该student
字段中的选项。
const {room} = watch();
并在 中,将propSelectPicker
修改为:data
data={
_STUDENT && _STUDENT.length > 0 ?
_STUDENT.filter(s => s.room === room).map(x => ({ label: x.name, value: x.id })) : []
}
推荐阅读
- swift - 如何在 SwiftUI 中获取实际视图渲染的大小和位置?
- uwp - 如何并行编译/构建和打包 MSIX 项目?
- c# - 如何阻止我的角色在我的脚本中无限跳跃?
- python - 硒的网络抓取问题
- spring-boot - 带有 Spring Boot 的 Kafka-Streams 示例
- docker - Docker 使用主机的 DNS,而不是 /etc/resolv.conf 中提到的 DNS
- r - 如何在R中拆分字符串并保存为数据框?
- api - EC2 安全组上的安全前端 React 和后端 API 不起作用
- database - 数据框与表格
- java - com.microsoft.sqlserver.jdbc.SQLServerException:在获取结果集的值时连接已关闭