带有 Formik 内部输入的自定义更改处理程序
Custom change handlers with inputs inside Formik
我正在移植我使用 SUIR over to a Formik 实现制作的一些表格。我有需要自定义更改处理程序来执行操作的输入组件。我怎样才能将我的更改处理程序传递给 onChange
道具,以便 formik 跟踪这些值?
我试过类似的方法,但没有成功。
onChange={e => setFieldValue(dataSchemaName, e)}
其中提到的不同 post .
也提到了 here,但我不能完全让我的自定义更改处理程序与 Formik 很好地连接。
我的更改处理程序如下所示
handleSchemaChange = (e, { value }) => {
this.setState({ dataSchemaName: value }, () => {
console.log("Chosen dataSchema ---> ", this.state.dataSchemaName);
//also send a request the selfUri of the selected dataSchema
});
const schema = this.state.dataschemas.find(schema => schema.name === value);
if (schema) {
axios
.get(schema.selfUri)
.then(response => {
console.log(response);
this.setState({
fields: response.data.data.fields,
});
console.log(this.state.fields);
})
.catch(error => console.log(error.response));
}
};
这是我使用下拉菜单的表单域之一的示例
<Form.Field>
<label style={{ display: "block" }}>
Select a Schema
</label>
<Dropdown
id="dataSchemaName"
multiple={false}
options={dataschemas.map(schema => {
return {
key: schema.id,
text: schema.name,
value: schema.name
};
})}
value={dataSchemaName}
onChange={this.handleSchemaChange}
/>
</Form.Field>
我有一个 sandbox 问题
你可以把setFieldValue
函数传递给你的函数handleSchemaChange
,然后在里面使用它。
所以,而不是 onChange={this.handleSchemaChange}
onChange={(e, val) => this.handleSchemaChange(e, val, setFieldValue)}
.
在你的 handleSchemaChange
函数中:
handleSchemaChange = (e, { value }, setFieldValue) => {
setFieldValue('dataSchemaName', value);
... the rest of your implementation
}
这是实施了解决方案的沙箱:
https://codesandbox.io/s/formik-create-query-schema-uq35f
我正在移植我使用 SUIR over to a Formik 实现制作的一些表格。我有需要自定义更改处理程序来执行操作的输入组件。我怎样才能将我的更改处理程序传递给 onChange
道具,以便 formik 跟踪这些值?
我试过类似的方法,但没有成功。
onChange={e => setFieldValue(dataSchemaName, e)}
其中提到的不同 post
也提到了 here,但我不能完全让我的自定义更改处理程序与 Formik 很好地连接。
我的更改处理程序如下所示
handleSchemaChange = (e, { value }) => {
this.setState({ dataSchemaName: value }, () => {
console.log("Chosen dataSchema ---> ", this.state.dataSchemaName);
//also send a request the selfUri of the selected dataSchema
});
const schema = this.state.dataschemas.find(schema => schema.name === value);
if (schema) {
axios
.get(schema.selfUri)
.then(response => {
console.log(response);
this.setState({
fields: response.data.data.fields,
});
console.log(this.state.fields);
})
.catch(error => console.log(error.response));
}
};
这是我使用下拉菜单的表单域之一的示例
<Form.Field>
<label style={{ display: "block" }}>
Select a Schema
</label>
<Dropdown
id="dataSchemaName"
multiple={false}
options={dataschemas.map(schema => {
return {
key: schema.id,
text: schema.name,
value: schema.name
};
})}
value={dataSchemaName}
onChange={this.handleSchemaChange}
/>
</Form.Field>
我有一个 sandbox 问题
你可以把setFieldValue
函数传递给你的函数handleSchemaChange
,然后在里面使用它。
所以,而不是 onChange={this.handleSchemaChange}
onChange={(e, val) => this.handleSchemaChange(e, val, setFieldValue)}
.
在你的 handleSchemaChange
函数中:
handleSchemaChange = (e, { value }, setFieldValue) => {
setFieldValue('dataSchemaName', value);
... the rest of your implementation
}
这是实施了解决方案的沙箱: https://codesandbox.io/s/formik-create-query-schema-uq35f