提问人:Metalmilitian85 提问时间:9/2/2023 更新时间:9/2/2023 访问量:48
如何从下拉菜单中获取值以在电子邮件中发送
How to get a value from a dropdown menu to send in an e-mail
问:
在 React 中,我有一个联系人,上面有姓名、电子邮件和一个消息框,工作正常。提交时,这三个项目按应有的方式发送。但是,我正在尝试从下拉菜单中获取选定的项目以与它一起发送。我假设它可能不像其他三个项目那样简单,但我对这个项目感到茫然。谢谢!
这是我的联系表格页面。
import React, { useRef } from 'react';
import emailjs from '@emailjs/browser';
import Data from './data.json'
import Select from 'react-select'
export const Email = () => {
const form = useRef();
const sendEmail = (e) => {
e.preventDefault();
emailjs.sendForm('xxxxx', 'xxxxxx', form.current, 'xxxxxx')
.then((result) => {
console.log(result.text);
}, (error) => {
console.log(error.text);
});
};
console.log(sendEmail);
return (
<form ref={form} onSubmit={sendEmail} className="flex flex-col mx-7 md:w-[30%] md:mx-auto">
<label className="font-semibold">Name</label>
<input type="text" name="user_name" className="rounded-md border-2 border-purple-500"/>
<label className="font-semibold">Email</label>
<input type="email" name="user_email" className="rounded-md border-2 border-purple-500"/>
<label className="font-semibold">Message</label>
<textarea name="message" className='rounded-md border-2 border-purple-500'/>
<Select name="title" options={Data} />
<input type="submit" value="Send" className="font-semibold w-16 mx-auto mt-7 rounded-md bg-purple-300 hover:cursor-pointer hover:border-purple-800 hover:bg-purple-500 border-2 border-purple-500"/>
</form>
);
};
这是我正在导入和播放的数据列表,我正在尝试从中发送选定的选项。
[
{
"id": 1,
"title": "Cheese Burger",
"label": "four"
},
{
"id": 2,
"title": "Bacon Burger",
"label": "five"
}
]
答:
我不认为这个问题有一个简单的解决方案。作为一个自定义组件 {read: nested all to gravy},它没有内部工作原理来与 a 接口,您将不得不使用外部库。<Select />
<form>
我选择了 react-hook-form,但您可以使用其他表单库,例如 formik。
编辑:我正在使用 react-hook-form v6 -> v7 的 v7 语法
import React from 'react';
import { useForm, Controller } from 'react-hook-form'
import emailjs from '@emailjs/browser';
import Data from './data.json'
import Select from 'react-select'
export const Email = () => {
// react-hook-form functions / state
const { handleSubmit, register, control } = useForm()
// update the submit function for emailjs.send
const sendEmail = (data) => {
emailjs.send('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', data, 'YOUR_PUBLIC_KEY')
.then((result) => {
console.log(result.text)
}, (error) => {
console.log(error.text)
})
}
return (
<form onSubmit={ handleSubmit(sendEmail) } className="flex flex-col mx-7 md:w-[30%] md:mx-auto">
<label className="font-semibold">Name</label>
<input {...register('user_name')} type="text" className="rounded-md border-2 border-purple-500"/>
<label className="font-semibold">Email</label>
<input {...register('user_email')} type="email" className="rounded-md border-2 border-purple-500"/>
<label className="font-semibold">Message</label>
<textarea {...register('message')} className='rounded-md border-2 border-purple-500'/>
<Controller
name='select'
control={control}
render={({ field }) => (
<Select {...field} options={Data} />
)}
/>
<input type="submit" value="Send" className="font-semibold w-16 mx-auto mt-7 rounded-md bg-purple-300 hover:cursor-pointer hover:border-purple-800 hover:bg-purple-500 border-2 border-purple-500"/>
</form>
)
}
您将注册每个输入,并且任何自定义组件都将包装在从 react-hook-form 导入的组件中。<Select>
<Controller />
你可以随心所欲地做任何事情,但上面的例子是最基本的,没有任何类型的字段验证、规则等。
提交的表单数据将采用json对象的形式,其中键是传递给寄存器函数的名称,或者在控制器的情况下是name属性。
然后,您可以像以前在电子邮件模板中访问这些值一样访问这些值。 等等,用于那些简单的值。
由于我真的不知道您想要从数据对象传递什么,因此我将整个对象以名称传递给您的 sendEmail 函数。在电子邮件模板端,您将获得如下值: .{{user_name}} {{user_email}} {{message}}
select
{{select.id}} {{select.label}} {{select.title}}
尝试从电子邮件模板中的对象中获取值,仅使用对象的名称将打印在电子邮件中,而不是任何信息。{{select}}
[object Object]
评论