searchForm自適應布局 + 按鈕插槽

收起

在這里插入圖片描述

展開

在這里插入圖片描述

代碼:

useResizeObserverHooks.js

import { useEffect, useLayoutEffect } from "react";export const useResizeObserver = (containerDom, domClass, callback) => {useLayoutEffect(() => {let resizeObserver = null;let dom = null;if (typeof ResizeObserver !== "undefined") {// 選擇你想要觀察的元素const container = containerDom || document;dom = container.querySelector(domClass);// 創建一個 ResizeObserver 實例并傳入回調函數resizeObserver = new ResizeObserver(entries => {// 循環遍歷所有觀察到變化的元素for (const entry of entries) {const height = entry.target.offsetHeight;callback(height);}});// 開始觀察元素if (dom) {resizeObserver?.observe(dom);}} else {console.log("ResizeObserver is not supported in this browser.");}return () => {if (dom) {resizeObserver.unobserve(dom);resizeObserver?.disconnect(dom);}};}, [containerDom, domClass, callback]);
};
import React, { useState } from "react";
import { Button, ConfigProvider, Space, Form, Flex } from "antd";
import styles from "./Index.module.less";
import { useResizeObserver } from "./useResizeObserverHooks";const classnames = (...args) => {return args.filter(Boolean).join(" ");
};const SearchForm = props => {const {defaultHeight = 58,children,onResetHandle,buttomSolt,submitText = "查詢",resetText = "重置",...FromProps} = props;// const [form] = Form.useForm();// console.log(buttomSolt, "buttomSolt");const [showMore, setShowMore] = useState(false);const containerRef = useRef(null);useResizeObserver(containerRef.current,".ant-form", h => {setShowMore(h > defaultHeight);});const onReset = () => {// form.resetFields();onResetHandle && onResetHandle();};const [isOpen, setIsOpen] = useState(false);return (<divref={containerRef}style={{ height: `${isOpen ? "auto" : `${defaultHeight}px`}` }}className={classnames(styles.searchForm,!isOpen ? styles.overflowhidden : "",)}><ConfigProvidertheme={{token: {borderRadius: 4,},}}><Form {...FromProps}><div className={styles.formItemBox}>{children}</div><divclassName={styles.ButtonBox}style={{paddingBottom: `${isOpen ? "" : "4px"}`,height: `${isOpen ? "auto" : `${defaultHeight}px`}`,}}><Form.Item>{buttomSolt ? (buttomSolt) : (<><Button htmlType="button" onClick={onReset}>{resetText}</Button><Button type="primary" htmlType="submit">{submitText}</Button></>)}</Form.Item></div></Form></ConfigProvider>{/* 展開 收起 */}{isOpen ? <div className={styles.zhanweibefore}></div> : null}{showMore ? (<divclassName={isOpen ? styles.before : styles.topBefore}onClick={() => {setIsOpen(e => !e);}}><div></div></div>) : null}</div>);
};export default SearchForm;

樣式

.overflowhidden {overflow: hidden;
}
.searchForm {color: #666666;position: relative;.formItemBox {display: flex;align-items: flex-start;justify-content: flex-start;flex-wrap: wrap;flex: 1;}.topBefore {position: absolute;bottom: 0;background: #fff;border-bottom: 1px solid #dce6ec;width: 100%;display: flex;justify-content: center;cursor: pointer;> div {width: 74px;height: 4px;background: #b3d9ff;position: relative;cursor: pointer;&::before {content: "";width: 0;height: 0;border-left: 5px solid transparent;border-right: 5px solid transparent;border-bottom: 10px solid #b3d9ff;position: absolute;top: -2px;left: 50%;transform: translate(-50%, -50%);}}}.zhanweibefore {width: 100%;height: 14px;}.before {position: absolute;bottom: 0;background: #fff;width: 100%;height: 14px;display: flex;justify-content: center;border-top: 1px solid #dce6ec;> div {width: 74px;height: 4px;background: #b3d9ff;position: relative;cursor: pointer;&::before {content: "";width: 0;height: 0;border-left: 5px solid transparent;border-right: 5px solid transparent;border-top: 10px solid #b3d9ff;position: absolute;top: 7px;left: 50%;transform: translate(-50%, -50%);}}}.ButtonBox {width: 200px;height: 100%;display: flex;align-items: flex-end;justify-content: flex-end;:global {.ant-btn {padding: 4px 10px;margin-right: 10px;}// 重置插槽內樣式.ant-form-item-control-input-content {align-items: flex-end;justify-content: flex-end;}}}:global {.ant-form {//   padding-right: 200px;position: relative;}.ant-form-item {display: flex;align-items: center;width: 290px;margin: 0;padding: 10px 15px 10px 0;}.ant-row {flex: 1;.ant-form-item-label {width: 90px;}.ant-form-item-control {flex: 1;}.ant-form-item-control-input-content {display: flex;.flex1 {flex: 1;}.flex2 {flex: 2;}}}.ant-space-compact {flex: 1;align-items: center;}.ant-picker,.ant-input-number {width: 100%;}.span2 {width: 580px;}.ant-slider {width: 100%;}}
}

使用

查看Antd Form api

 className="span2"className="flex2"className="flex1"
import React, { useState, useEffect } from "react";
import styles from "./index.module.less";
import SearchForm from "@/components/SearchForm";
import HocAntdTable from "@/components/HocAntdTable";import {Form,Space,Tag,Button,Cascader,Checkbox,ColorPicker,DatePicker,Input,InputNumber,Radio,Select,Slider,Switch,TreeSelect,Upload,
} from "antd";const { RangePicker } = DatePicker;
const { TextArea } = Input;const mockDataSource = Array.from({ length: 20 }, (_, index) => ({key: (index + 1).toString(),firstName: ["John", "Jim", "Joe"][index % 3],lastName: ["Brown", "Green", "Black"][index % 3],age: [32, 42, 32][index % 3],address: ["New York No. 1 Lake Park","London No. 1 Lake Park","Sydney No. 1 Lake Park",][index % 3],tags: [["nice", "developer"], ["loser"], ["cool", "teacher"]][index % 3],
}));
const dataSource = [...mockDataSource,{key: "1",firstName: "John",lastName: "Brown",age: 32,address: "New York No. 1 Lake Park",tags: ["nice", "developer"],},{key: "2",firstName: "Jim",lastName: "Green",age: 42,address: "London No. 1 Lake Park",tags: ["loser"],},{key: "3",firstName: "Joe",lastName: "Black",age: 32,address: "Sydney No. 1 Lake Park",tags: ["cool", "teacher"],},{key: "11",firstName: "John",lastName: "Brown",age: 32,address: "New York No. 1 Lake Park",tags: ["nice", "developer"],},{key: "22",firstName: "Jim",lastName: "Green",age: 42,address: "London No. 1 Lake Park",tags: ["loser"],},{key: "33",firstName: "Joe",lastName: "Black",age: 32,address: "Sydney No. 1 Lake Park",tags: ["cool", "teacher"],},
];const columns = [{title: "姓名",dataIndex: "name",key: "name",},{title: "年齡",dataIndex: "age",key: "age",},{title: "住址",dataIndex: "address",key: "address",},
];const FormTableDemoPage = props => {const [form] = Form.useForm();const aa = () => {form.resetFields();};return (<>{/* 表單搜索 對照antd Api通用 */}<SearchFormlabelAlign="left"layout="inline"onFinish={values => {console.log(values);}}form={form}onFieldsChange={(changedFields, allFields) => {console.log(changedFields, allFields);}}onResetHandle={() => {// 重置事件form.resetFields();}}// buttomSolt = {//     <div>//     <Button>重置</Button>//     <Button>定義</Button>//     </div>// }><Form.ItemclassName="span1"label="Checkbox"name="disabled"valuePropName="checked"><Checkbox>Checkbox</Checkbox></Form.Item><Form.Item label="Address"><Space.Compact><Form.Itemname={["address", "province"]}noStylerules={[{required: true,message: "Province is required",},]}><Select placeholder="Select province"><Option value="Zhejiang">Zhejiang</Option><Option value="Jiangsu">Jiangsu</Option></Select></Form.Item><Form.Itemname={["address", "street"]}noStylerules={[{required: true,message: "Street is required",},]}><Inputstyle={{width: "50%",}}placeholder="Input street"/></Form.Item></Space.Compact></Form.Item><Form.Item label={null} name="ssss"><Select className="flex1"><Select.Option value="demo">Demo</Select.Option><Select.Option value="222">Demo</Select.Option></Select><Select className="flex2" name="demo"><Select.Option value="demo">Demo</Select.Option><Select.Option value="222">Demo</Select.Option></Select></Form.Item><Form.Item label="Radio" name="Radio"><Radio.Group><Radio value="apple"> Apple </Radio><Radio value="pear"> Pear </Radio></Radio.Group></Form.Item><Form.Item label="Input" name="Input"><Input /></Form.Item><Form.Item label="Select" name="Select"><Select><Select.Option value="demo">Demo</Select.Option></Select></Form.Item><Form.Item label="TreeSelect" name="TreeSelect"><TreeSelecttreeData={[{title: "Light",value: "light",children: [{title: "Bamboo",value: "bamboo",},],},]}/></Form.Item><Form.Item label="Cascader" name="Cascader"><Cascaderoptions={[{value: "zhejiang",label: "Zhejiang",children: [{value: "hangzhou",label: "Hangzhou",},],},]}/></Form.Item><Form.Item label="DatePicker" name="DatePicker"><DatePicker /></Form.Item><Form.Item label="RangePicker" className="span2" name="RangePicker"><RangePicker /></Form.Item><Form.Item label="InputNumber"><InputNumber /></Form.Item><Form.Item label="Switch" valuePropName="checked" name="Switch"><Switch /></Form.Item><Form.Item label="Button"><Button>Button</Button></Form.Item><Form.Item label="Slider"><Slider /></Form.Item><Form.Item label="ColorPicker"><ColorPicker /></Form.Item></SearchForm>{/* 表格查看  對照antd Api通用<HocAntdTable dataSource={dataSource} columns={columns} />*/}</>);
};export default FormTableDemoPage;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40680.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt Json詳細介紹

一.概念介紹 JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;常用于前后端數據傳輸和存儲。它具有以下特點&#xff1a; 易讀性&#xff1a;JSON 使用人類可讀的文本格式表示數據&#xff0c;采用鍵值對的方式組織數據&#x…

eth0設備繁忙

當您遇到 ifconfig eth0 hw ether 20:24:07:04:18:00 命令執行后顯示 ifconfig: SIOCSIFHWADDR: Device or resource busy 錯誤時&#xff0c;這意味著您嘗試更改的網絡設備&#xff08;在這個例子中是 eth0&#xff09;目前正被占用&#xff0c;無法進行硬件地址的更改。 為了…

Map Set(Java篇詳解)

&#x1f341; 個人主頁&#xff1a;愛編程的Tom&#x1f4ab; 本篇博文收錄專欄&#xff1a;Java專欄&#x1f449; 目前其它專欄&#xff1a;c系列小游戲 c語言系列--萬物的開始_ 等 &#x1f389; 歡迎 &#x1f44d;點贊?評論?收藏&#x1f496;三連支持…

【每日一練】python列表

1、輸入一個整數列表&#xff0c;將列表中的元素按照逆序輸出。 list1[5,4,5,6] list1.reverse() print(list1)[6, 5, 4, 5]2、輸入一個字符串列表&#xff0c;輸出其中長度大于等于5的字符串&#xff0c;并且將它們轉換為大寫形式。 list1[hello,lol,ak47,aliang] for i in …

211.xv6——3(page tables)

在本實驗室中&#xff0c;您將探索頁表并對其進行修改&#xff0c;以簡化將數據從用戶空間復制到內核空間的函數。 開始編碼之前&#xff0c;請閱讀xv6手冊的第3章和相關文件&#xff1a; kernel/memlayout.h&#xff0c;它捕獲了內存的布局。kernel/vm.c&#xff0c;其中包含…

代謝組數據分析(十二):嶺回歸、Lasso回歸、彈性網絡回歸構建預測模型

歡迎大家關注全網生信學習者系列: WX公zhong號:生信學習者Xiao hong書:生信學習者知hu:生信學習者CDSN:生信學習者2介紹 在代謝物預測模型的構建中,我們采用了三種主流的回歸分析方法:嶺回歸、Lasso回歸以及彈性網絡回歸。這三種方法各有其獨特的原理和適用場景,因此在…

WPS操作技巧:制作可以打對勾的方框,只需簡單幾步!沈陽wps辦公軟件培訓

日常工作中&#xff0c;我們經常需要在表格中添加復選框&#xff0c;比如【性別選擇】、【任務完成狀態】等等&#xff0c;通過打對勾來確定狀態。今天就分別從WPS的Excel表格和Word文檔2種場景&#xff0c;介紹制作可以打對勾的復選框的方法技巧&#xff0c;掌握技巧&#xff…

25、PHP 實現兩個鏈表的第一個公共結點(含源碼)

題目&#xff1a; PHP 實現兩個鏈表的第一個公共結點 描述&#xff1a; 輸入兩個鏈表&#xff0c;找出它們的第一個公共結點。 <?php /*class ListNode{var $val;var $next NULL;function __construct($x){$this->val $x;} }*/ function FindFirstCommonNode($pHead…

構建zdppy docker鏡像

拉取鏡像 docker pull python:3.8-alpine3.19創建容器 docker run -itd --name zdppy python:3.8-alpine3.19 sh進入容器 docker exec -it zdppy sh配置pip國內源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple提交容器為鏡像 docker commit…

游戲AI的創造思路-技術基礎-計算機視覺

讓游戲的AI具備“眼睛”和“視覺”&#xff0c;就是通過計算機視覺的方法進行的。現在&#xff0c;越來越多的游戲&#xff0c;特別是動捕類游戲都在使用這個方法。當然&#xff0c;計算機視覺不僅僅用于游戲&#xff0c;越來越多的應用使用到這個技術 目錄 1. 定義 2. 發展歷…

spring 枚舉、策略模式、InitializingBean初使化組合使用示例

實現一個簡單的文本處理系統。 在這個系統中&#xff0c;我們將定義不同類型的文本處理策略&#xff0c;比如大小寫轉換、添加前綴后綴等&#xff0c;并使用工廠模式來管理這些策略。 1 定義一個枚舉來標識不同的文本處理類型 public enum TextProcessTypeEnum {UPPER_CASE,LO…

騰訊混元文生圖開源模型推出小顯存版本,6G顯存即可運行,并開源caption模型

7月4日&#xff0c;騰訊混元文生圖大模型&#xff08;混元DiT&#xff09;宣布開源小顯存版本&#xff0c;僅需6G顯存即可運行&#xff0c;對使用個人電腦本地部署的開發者十分友好&#xff0c;該版本與LoRA、ControlNet等插件&#xff0c;都已適配至Diffusers庫&#xff1b;并…

探索 Apache Paimon 在阿里智能引擎的應用場景

摘要&#xff1a;本文整理自Apache Yarn && Flink Contributor&#xff0c;阿里巴巴智能引擎事業部技術專家王偉駿&#xff08;鴻歷&#xff09;老師在 5月16日 Streaming Lakehouse Meetup Online 上的分享。內容主要分為以下三個部分&#xff1a; 一、 阿里智能引擎…

【LeetCode】全排列

目錄 一、題目二、解法完整代碼 一、題目 給定一個不含重復數字的數組 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] …

LVS+Nginx高可用集群--基礎篇

1.集群概述 單體部署&#xff1a; 可以將上面內容分別部署在不同的服務器上。 單體架構的優點&#xff1a; 小團隊成型就可完成開發&#xff0c;測試&#xff0c;上線 迭代周期短&#xff0c;速度快 打包方便&#xff0c;運維簡單 單體架構的挑戰&#xff1a;單節點宕機造成…

DVWA sql手注學習(巨詳細不含sqlmap)

這篇文章主要記錄學習sql注入的過程中遇到的問題已經一點學習感悟&#xff0c;過程圖片會比較多&#xff0c;比較基礎和詳細&#xff0c;不存在看不懂哪一步的過程 文章目錄 靶場介紹SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶場介紹 DVWA&#xff08;Damn…

必備的 Adobe XD 輔助工具

想要高效便捷的使用 Adobe XD&#xff0c; Adobe XD 插件是必不可少的&#xff0c; Adobe XD 的插件非常多&#xff0c;但 90%都是英文&#xff0c;并且良莠不齊。在這兒挑選 9 個好用的 Adobe XD 插件給大家&#xff0c;這里是我整理的一些實用 Adobe XD 插件&#xff0c;讓你…

大屏開發系列——Echarts的基礎使用

本文為個人近期學習總結&#xff0c;若有錯誤之處&#xff0c;歡迎指出&#xff01; Echarts在vue2中的基礎使用 一、簡單介紹二、基本使用&#xff08;vue2中&#xff09;1.npm安裝2.main.js引入3.使用步驟(1)準備帶有寬高的DOM容器&#xff1b;(2)初始化echarts實例&#xff…

gcc: warning: -Wunused-function;加了選項,為什么就不報警告呢?

文章目錄 問題clang的編譯而使用gcc是就不報問題分析原因如果是非static的函數問題 下面這個代碼段,其中這個函數hton_ext_2byte,在整個程序里就沒有使用。 static inline uint16_t hton_ext_2byte(uint8_t **p) {uint16_t v;******return v;

PHP宜邦家政服務管理系統-計算機畢業設計源碼04426

目 錄 摘要 1 緒論 1.1 選題背景與意義 1.2開發現狀 1.3論文結構與章節安排 2 宜邦家政服務管理系統系統分析 2.1 可行性分析 2.1.1 技術可行性分析 2.1.2 經濟可行性分析 2.1.3 操作可行性分析 2.2 系統功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系統用…