溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Remix表單常用方法有哪些

發(fā)布時間:2023-03-24 13:57:03 來源:億速云 閱讀:198 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Remix表單常用方法有哪些”,在日常操作中,相信很多人在Remix表單常用方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Remix表單常用方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    Remix 的三種表單

    • 原生表單

    • Remix 提供的表單組件

    • Remix fetcher 表單

    回顧表單基礎(chǔ)

    • 提交行為:enter 按鍵(只有一個 input type="txt")/使用具有 type=sumbit 的按鈕

    • method 不指定時,form 默認使用 get 方法

    • form 提交后默認行為是跳轉(zhuǎn)到 action 對應(yīng)的頁面

    • 表單的提交方式是 content-type = x-www-form-unlencoded

    表單提交的形式

    • 使用 html 標簽屬性,自動提交

    • 手動提交:鉤子函數(shù) sumit 提交方式, fetcher.sumbit 提交方式

    阻止跳轉(zhuǎn)

    通常我們不希望提交表單后發(fā)生跳轉(zhuǎn)行為:使用事件阻止函數(shù)進行阻止。

    const handleClick = (e) => {
     e.preventDefault()
    }

    Remix 提供的表單組件

    import { Form } from "@remix-run/react";

    一個簡單的 demo

    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 請求表單。

    使用鉤子函數(shù)提交函數(shù)

    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>
      );
    }

    注意手動提交之前先要阻止事件默認行為。

    Remix fetcher 表單

    一個簡單的 demo

    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 屬性

    沒有定義以上兩個屬性,提交代碼的時候,提交函數(shù)不會執(zhí)行

    使用 fetcher.submit 函數(shù)提交

    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 方法其實與鉤子函數(shù) submit 是一樣的。

    useFetcher 的其他內(nèi)容

    • state 表示當前的條狀態(tài) idle/submitting/loading

    • data 表示 action 中響應(yīng)的數(shù)據(jù)

    • load 函數(shù)表示從路由中讀取 action 函數(shù)返回的數(shù)據(jù)

    • submission 是可能構(gòu)建 optimistic UI

    其他的表單

    • 一個使用 useSubmit 鉤子函數(shù)手動提交 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>
      );
    }

    到此,關(guān)于“Remix表單常用方法有哪些”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI