您好,登錄后才能下訂單哦!
這篇文章主要介紹“Remix表單常用方法有哪些”,在日常操作中,相信很多人在Remix表單常用方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Remix表單常用方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
原生表單
Remix 提供的表單組件
Remix fetcher 表單
提交行為:enter 按鍵(只有一個 input type="txt")/使用具有 type=sumbit 的按鈕
method 不指定時,form 默認使用 get 方法
form 提交后默認行為是跳轉到 action 對應的頁面
表單的提交方式是 content-type = x-www-form-unlencoded
使用 html 標簽屬性,自動提交
手動提交:鉤子函數 sumit 提交方式, fetcher.sumbit 提交方式
通常我們不希望提交表單后發生跳轉行為:使用事件阻止函數進行阻止。
const handleClick = (e) => { e.preventDefault() }
import { Form } from "@remix-run/react";
import { json } from "@remix-run/node"; import { Form } from "@remix-run/react"; export async function action () { let data = { a: 'this is data' } return json({ ...data }) } export default function Index() { return ( <div> <div>Remix Form</div> <Form method="post"> <input type="text" name="a-name-remix"/> <button type="submit">submit-remix</button> </Form> </div> ); }
注意:Form 組件沒有定義 method 的時候,點擊提交按鈕沒有任何效果。一般添加 method='post'
。添加之后就可以正常提交 post 請求表單。
import { json } from "@remix-run/node"; import { Form, useSubmit } from "@remix-run/react"; export async function action () { let data = { a: 'this is data' } console.log(data) return json({ ...data }) } export default function Index() { const submit = useSubmit(); const handleClick = (e) => { e.preventDefault() submit(e.target, { method: 'post' }) } return ( <div> <div>Remix Form</div> <Form onSubmit={handleClick}> <input type="text" name="a-name-remix"/> <button type="submit">submit-remix</button> </Form> </div> ); }
注意手動提交之前先要阻止事件默認行為。
import { json } from "@remix-run/node"; import { useFetcher } from "@remix-run/react"; export async function action () { let data = { a: 'this is data' } return json({ ...data }) } export default function Index() { const fetcher = useFetcher(); return ( <div> <div>Remix Form</div> <fetcher.Form method="post"> <input type="text" name="a-name-remix"/> <button type="submit">submit-remix</button> </fetcher.Form> </div> ); }
Form 添加 post 方法,點擊提交按鈕,自動提交到當前 Route 模塊中的 action 方法中。
method 屬性
action 屬性
沒有定義以上兩個屬性,提交代碼的時候,提交函數不會執行
import { json } from "@remix-run/node"; import { useFetcher } from "@remix-run/react"; export async function action () { let data = { a: 'this is data' } console.log(data) return json({ ...data }) } export default function Index() { const fetcher = useFetcher(); const onSubmit = (e) => { e.preventDefault(); fetcher.submit(e.target, { method: 'post', action: '/main/form' }) } return ( <div> <div>Remix Form</div> <fetcher.Form onSubmit={onSubmit}> <input type="text" name="a-name-remix"/> <button type="submit">submit-remix</button> </fetcher.Form> </div> ); }
onSubmit 中首先就是要解決提交的默認行為問題,阻止了表單的默認行為之后,使用 submit 方法其實與鉤子函數 submit 是一樣的。
state 表示當前的條狀態 idle/submitting/loading
等
data 表示 action 中響應的數據
load 函數表示從路由中讀取 action 函數返回的數據
submission 是可能構建 optimistic UI
一個使用 useSubmit 鉤子函數手動提交 antd 表單的例子
import { Form, Input, Button } from "antd"; import { useSubmit } from "@remix-run/react"; export async function action() { return { a: 1 } } export default function () { const submit = useSubmit(); const handleClick = (data) => { submit(data, { method: "post", }); }; return ( <div> <Form onFinish={handleClick}> <Form.Item name="name"> <Input /> </Form.Item> <Button htmlType="submit" > 提交 </Button> </Form> </div> ); }
一個手動提交 antd pro-component 表單的例子
import { Button } from "antd"; import { ProForm, ProFormText } from '@ant-design/pro-components' import { useSubmit } from "@remix-run/react"; export async function action() { return { a: 1 } } export default function () { const submit = useSubmit(); const handleClick = async (data: any) => { submit(data, { method: "post", }); return false }; return ( <div> <ProForm onFinish={handleClick}> <ProFormText name="name" /> <Button htmlType="submit" > 提交 </Button> </ProForm> </div> ); }
到此,關于“Remix表單常用方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。