Skip to content

field 输入框

用户可以在文本框内输入或编辑文字。

Props参数

名称类型是否必传默认值描述
valuestring | number-
typeTFieldType-输入框类型
placeholderstring-占位提示符
fieldPropsInputProps-原生inputProps
allowClearboolean-是否运行清空

示例

tsx
import { memo, useState } from 'react'
import { View } from '@tarojs/components'
import MMField from '../../components/field'
import MMPageContainer from '../_components/page-container'
import PageDemoBlock from '../_components/page-demo-block'

const Component = () => {
  const [checked, setChecked] = useState(false)
  const [select, setSelect] = useState('')
  const [textare, settextare] = useState('')

  return (
    <MMPageContainer title="输入框">
      <NormalField />

      <PageDemoBlock title="设置">
        <View>右侧值区域对齐方式</View>
        <View className="spacing" />
        <MMField label="value 左对齐" valueAlign="left" value={textare} onChange={settextare} />
        <MMField label="value 居中" valueAlign="center" value={textare} onChange={settextare} />
        <MMField label="value 右对齐" value={textare} onChange={settextare} />
      </PageDemoBlock>

      <PageDemoBlock title="高级组件">
        <View>Field内置了许多高级组件</View>
        <View className="spacing" />
        <MMField.Switch label="切换器" name="addArr" checked={checked} onChange={setChecked} />
        <MMField.Select
          label="选择框"
          name="Select"
          value={select}
          options={[
            { label: '选项1', value: '1' },
            { label: '选项2', value: '2' }
          ]}
          onChange={setSelect}
        />
        <MMField.TextArea label="文本框" name="TextArea" value={textare} onChange={settextare} />
      </PageDemoBlock>

      <CityField />
    </MMPageContainer>
  )
}

const FieldPage = memo(Component)
export default FieldPage

function NormalField() {
  const [text, setText] = useState('')
  const [amount, setAmount] = useState('')

  return (
    <PageDemoBlock title="使用">
      <View>以下是基础示例</View>
      <View className="spacing" />
      <MMField label="普通输入框" name="normalField" placeholder="请输入内容" value={text} onChange={setText} />
      <MMField label="纯数字" name="number" value={amount} type="digit" onChange={setAmount} />
    </PageDemoBlock>
  )
}

/**
 * 城市选择
 *
 * @return {*}
 */
function CityField() {
  const [addressInfo, setAddressInfo] = useState({
    mobile: '',
    name: '',
    defaulted: false,
    address: '',
    coords: '',
    tag: undefined,
    addArr: []
  })

  const updateInputValue = (data) => setAddressInfo((pre) => ({ ...pre, ...data }))

  return (
    <PageDemoBlock title="城市选择">
      <View>演示了如何使用 rules规则校验</View>
      <View className="spacing" />
      <MMField.CityPicker label="城市选择" name="addArr" value={addressInfo.addArr} onChange={(addArr) => updateInputValue({ addArr })} />

      <MMField
        label="详细地址"
        labelStyle={{ width: 70 }}
        name="address"
        required={false}
        rules={[
          {
            required: true,
            validate(_r, value) {
              if (value.length < 4) {
                return Promise.reject(new Error('请输入正确的收货地址'))
              }
              return Promise.resolve(true)
            }
          }
        ]}
        value={addressInfo.address}
        placeholder="详细地址,例如:1号楼6层601"
        onChange={(val) => {
          updateInputValue({ address: val })
        }}
      />
    </PageDemoBlock>
  )
}