如何在反应中收听按钮点击事件?
how to listen button click event in react?
我正在使用下面的包在 React 中动态生成一个表单:
https://www.npmjs.com/package/react-formio
我找到了一个例子 on button click, an event is listening
https://jsfiddle.net/Formio/obhgrrd8/?utm_source=website&utm_medium=embed&utm_campaign=obhgrrd8
我想在 react
中使用上述包做同样的事情
这是我的代码
https://codesandbox.io/s/lucid-austin-vjdrj
我有三个按钮我想听button click event
ReactDOM.render(
<Form src="https://wzddkgsfhfvtlmv.form.io/parentform" />,
// <Form src="https://peb3z.sse.codesandbox.io/abc" onSubmit={(i)=>{console.log(i)}} />,
rootElement
);
react 最后生成 javascript 代码。因此,您也可以在 React 中使用类似于 javascript 的事件。
例如,
const submit = ()=>{
//your work goes here
}
return (
<div onClick={submit}> // or onClick={ ()=>submit()}
</div>
)
在这种情况下,您需要 select 一个事件作为来自按钮模态的动作。
并给出事件名称(比如 eventFromButton1)。
然后在 <Form />
组件中,添加 onCustomEvent
prop.
<Form
form={{
onCustomEvent={customEvent => {
console.log(customEvent);
}}
/>
onCustomEvent
函数将接收具有以下结构的道具对象
{
type: "eventFromButton1",
component: {},
data: {},
event: MouseEvent
}
您可以使用 type
属性 来识别触发更新的按钮,并使用 data
属性 来获取表单数据。
尝试使用下面添加的按钮修改表单数据(我在 react-formio
中没有看到关于这些自定义的良好文档)
使用 submission
数据作为反应 state
。
更改 onCustomEvent
上的状态并重新呈现表单。
import React, { useState } from "react";
import { Form } from "react-formio";
function CustomForm() {
const [submission, setSubmission] = useState({});
return (
<div className="App">
<Form
form={{
components: [
{
label: "First Name",
validate: { required: true, minLength: 3 },
key: "firstName",
type: "textfield",
input: true
},
{
type: "textfield",
key: "lastName",
label: "Last Name",
placeholder: "Enter your last name",
input: true
},
{
label: "Pupulate Nast Name",
action: "event",
showValidations: false,
key: "submit1",
type: "button",
input: true,
event: "someEvent"
},
{
type: "button",
label: "Submit",
key: "submit",
disableOnInvalid: true,
input: true
}
]
}}
submission={{ data: submission }}
onSubmit={a => {
console.log(a);
}}
onSubmitDone={a => {
console.log(a);
}}
onCustomEvent={customEvent => {
console.log(customEvent);
setSubmission({ ...customEvent.data, lastName: "Laaast Name" });
}}
/>
</div>
);
}
export default CustomForm;
虽然形式上有一些小问题。
您会在 UI 中看到闪烁。
验证错误将消失(看起来提交按钮仍然被禁用)
试试这个 Sandbox
您也可以尝试使用文档中提到的 redux。
我正在使用下面的包在 React 中动态生成一个表单:
https://www.npmjs.com/package/react-formio
我找到了一个例子 on button click, an event is listening
https://jsfiddle.net/Formio/obhgrrd8/?utm_source=website&utm_medium=embed&utm_campaign=obhgrrd8
我想在 react
中使用上述包做同样的事情
这是我的代码
https://codesandbox.io/s/lucid-austin-vjdrj
我有三个按钮我想听button click event
ReactDOM.render(
<Form src="https://wzddkgsfhfvtlmv.form.io/parentform" />,
// <Form src="https://peb3z.sse.codesandbox.io/abc" onSubmit={(i)=>{console.log(i)}} />,
rootElement
);
react 最后生成 javascript 代码。因此,您也可以在 React 中使用类似于 javascript 的事件。
例如,
const submit = ()=>{
//your work goes here
}
return (
<div onClick={submit}> // or onClick={ ()=>submit()}
</div>
)
在这种情况下,您需要 select 一个事件作为来自按钮模态的动作。
并给出事件名称(比如 eventFromButton1)。
然后在 <Form />
组件中,添加 onCustomEvent
prop.
<Form
form={{
onCustomEvent={customEvent => {
console.log(customEvent);
}}
/>
onCustomEvent
函数将接收具有以下结构的道具对象
{
type: "eventFromButton1",
component: {},
data: {},
event: MouseEvent
}
您可以使用 type
属性 来识别触发更新的按钮,并使用 data
属性 来获取表单数据。
尝试使用下面添加的按钮修改表单数据(我在 react-formio
中没有看到关于这些自定义的良好文档)
使用 submission
数据作为反应 state
。
更改 onCustomEvent
上的状态并重新呈现表单。
import React, { useState } from "react";
import { Form } from "react-formio";
function CustomForm() {
const [submission, setSubmission] = useState({});
return (
<div className="App">
<Form
form={{
components: [
{
label: "First Name",
validate: { required: true, minLength: 3 },
key: "firstName",
type: "textfield",
input: true
},
{
type: "textfield",
key: "lastName",
label: "Last Name",
placeholder: "Enter your last name",
input: true
},
{
label: "Pupulate Nast Name",
action: "event",
showValidations: false,
key: "submit1",
type: "button",
input: true,
event: "someEvent"
},
{
type: "button",
label: "Submit",
key: "submit",
disableOnInvalid: true,
input: true
}
]
}}
submission={{ data: submission }}
onSubmit={a => {
console.log(a);
}}
onSubmitDone={a => {
console.log(a);
}}
onCustomEvent={customEvent => {
console.log(customEvent);
setSubmission({ ...customEvent.data, lastName: "Laaast Name" });
}}
/>
</div>
);
}
export default CustomForm;
虽然形式上有一些小问题。
您会在 UI 中看到闪烁。
验证错误将消失(看起来提交按钮仍然被禁用)
试试这个 Sandbox
您也可以尝试使用文档中提到的 redux。