• Vant React

Search 搜索

介绍

用于搜索场景的输入框组件。

引入

import { Search } from "@taroify/core"

代码演示

基础用法

value 用于控制搜索框中的文字,onChange 可以获得改变的值。

function BasicSearch() {
  const [value, setValue] = useState("")
  return (
    <Search
      value={value}
      placeholder="请输入搜索关键词"
      onChange={(e) => setValue(e.detail.value)}
    />
  )
}

事件监听

Search 组件提供了 onSearchonCancel 事件,onSearch 事件在点击键盘上的搜索/回车按钮后触发,onCancel 事件在点击搜索框右侧取消按钮时触发。

function SearchWithEvents() {
  const [value, setValue] = useState("")
  const [open, setOpen] = useState(false)

  return (
    <>
      <Toast open={open} onClose={() => setOpen(false)}>
        取消
      </Toast>
      <Search
        value={value}
        placeholder="请输入搜索关键词"
        action
        onChange={(e) => setValue(e.detail.value)}
        onCancel={() => setOpen(true)}
      />
    </>
  )
}

搜索框内容对齐

通过 inputAlign 属性设置搜索框内容的对齐方式,可选值为 centerright

function InputCenterSearch() {
  const [value, setValue] = useState("")
  return (
    <Search
      value={value}
      placeholder="请输入搜索关键词"
      inputAlign="center"
      onChange={(e) => setValue(e.detail.value)}
    />
  )
}

禁用搜索框

通过 disabled 属性禁用搜索框。

<Search disabled placeholder="请输入搜索关键词" />

自定义背景色

通过 className 属性可以设置搜索框外部的背景色,通过 shape="rounded" 属性设置搜索框的形状。

<Search className="background" shape="rounded" disabled placeholder="请输入搜索关键词" />
.background {
  --search-background-color: #4fc08d;
}

自定义按钮

使用 action 插槽可以自定义右侧按钮的内容。使用插槽后,cancel 事件将不再触发。

function CustomSearch() {
  const [value, setValue] = useState("")
  const [open, setOpen] = useState(false)
  return (
    <>
      <Toast open={open} onClose={() => setOpen(false)}>
        搜索
      </Toast>
      <Search
        value={value}
        label="地址"
        placeholder="请输入搜索关键词"
        action={<View onClick={() => setOpen(true)}>搜索</View>}
        onChange={(e) => setValue(e.detail.value)}
      />
    </>
  )
}

API

Props

参数说明类型默认值
label搜索框左侧文本string-
shape搜索框形状,可选值为 square roundedstring-
maxlength输入的最大字符数number | string-
placeholder占位提示文字string-
autoFocus自动聚焦,iOS 系统不支持该属性booleanfalse
focus获取焦点booleanfalse
disabled是否禁用输入框booleanfalse
readonly是否将输入框设为只读状态,只读状态下无法输入内容booleanfalse
icon输入框左侧图标ReactNode<Search />
rightIcon输入框右侧图标ReactNode-
action是否在搜索框右侧显示取消按钮boolean | ReactNodefalse
inputAlign输入框内容对齐方式,可选值为 center rightstringleft
inputColor输入框内容颜色,可选值为 primary info success warning dangerstring-
clearable是否启用清除图标,点击清除图标后会清空输入框booleantrue
clearIcon清除图标string<Clear />
clearTrigger显示清除图标的时机,always 表示输入框不为空时展示,
focus 表示输入框聚焦且不为空时展示
stringfocus
feedback提示文案,为空时不展示string | FormFeedbackProps | ReactElement-
enableNative使用原生键盘(仅支付宝小程序)booleantrue

Events

事件名说明回调参数
onSearch确定搜索时触发event: BaseEventOrig<InputProps.inputValueEventDetail>
onChange输入框内容变化时触发event: BaseEventOrig<InputProps.inputEventDetail>
onFocus输入框获得焦点时触发event: BaseEventOrig<InputProps.inputForceEventDetail>
onBlur输入框失去焦点时触发event: BaseEventOrig<InputProps.inputForceEventDetail>
onClear点击清除按钮后触发event: event: ITouchEvent
onCancel点击取消按钮时触发event: event: ITouchEvent

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

名称默认值描述
—search-padding10px * $hd var(—padding-sm)-
—search-background-colorvar(—white)-
—search-content-padding-leftvar(—padding-sm)-
—search-content-background-colorvar(—gray-1)-
—search-content-border-radiusvar(—border-radius-sm)-
—search-content-square-border-radius0-
—search-content-rounded-border-radiusvar(—border-radius-max)-
—search-input-height34px * $hd-
—search-label-padding0 5px * $hd-
—search-label-colorvar(—text-color)-
—search-label-font-sizevar(—font-size-md)-
—search-label-line-heightvar(—search-input-height)-
—search-field-padding5px * $hd var(—padding-xs) 5px * $hd 0-
—search-left-icon-colorvar(—gray-6)-
—search-action-padding0 var(—padding-xs)-
—search-action-colorvar(—text-color)-
—search-action-line-heightvar(—search-input-height)-
—search-action-font-sizevar(—font-size-md)-
—search-action-active-background-colorvar(—active-color)-