【React】Ant Design Mobile 使用多选框样式实现单选操作

import React, {
  useCallback, useEffect,
  useMemo,
  useState
} from 'react';
import {
  Card, ImagePicker, InputItem, List, TextareaItem, Checkbox
} from 'antd-mobile';

const RiskReporting = () => {
  const [data, setData] = useState({
    transferRecord: [
      {
        imgs: []
      }
    ],
    photo: [],
  });
  const [fileList, setFiles] = useState([]);
  const [conclusion, setConclusion] = useState([
    { value: 0, label: '开展处置', checked: false },
    { value: 1, label: '掌握关注', checked: false },
    { value: 2, label: '转移处理', checked: false },
  ]);

  const query = useMemo(() => ({
    addressCode: '',
    pageNo: 1,
    size: 10
  }), []);

  const getList = useCallback(() => {
    setData({
      type: '电信诈骗',
      level: '严重',
      position: 'aa',
      supervisor: 'bb',
      executor: 'cc',
      review: 'bb',
      endData: '2021-07-20',
    });
  }, [setData, query]);

  useEffect(() => {
    getList();
  }, [getList]);

  const onChange = (files, type, index) => {
    console.log(files, type, index);
    setFiles(files);
  };

  // 审批
  const chooseConclusion = (value) => {
    const list = [];
    for (let i = 0; i < conclusion.length; i++) {
      if (value === conclusion[i].value) {
        conclusion[i].checked = true;
      } else {
        conclusion[i].checked = false;
      }
      list.push(conclusion[i]);
    }
    setConclusion(list);
  };

  return (
    <>
      <div>
        <Card full>
          <Card.Body>
            <div>我是一个任务标题名称</div>
          </Card.Body>
          <Card.Footer content="发起人:左慧蓉" extra={<div>2021981200</div>} />
        </Card>
        <div style={{ height: '10px' }}></div>
        <List>
          <InputItem
            type="text"
            editable={false}
          >
            风险信息
          </InputItem>
          <InputItem
            type="text"
            value={data.type}
            editable={false}
          >
            类型
          </InputItem>
          <InputItem
            value={data.level}
            type="text"
            editable={false}
          >
            等级
          </InputItem>
          <InputItem
            value={data.position}
            type="text"
            placeholder="请描述具体位置"
            editable={false}
          >
            位置
          </InputItem>
        </List>
        <div style={{ height: '10px' }}></div>
        <List>
          <TextareaItem
            title="备注"
          />
          <TextareaItem
            defaultValue="发现电话,网络和短信方式,编造虚假信息,设置骗局。对受害人实施远程,非接触式诈骗,诱惑受害人。"
            rows={3}
            placeholder="请输入备注信息"
          />
          <div style={{ height: '10px' }}></div>
        </List>
        <List>
          <InputItem
            type="text"
            editable={false}
          >
            图片
          </InputItem>
          <ImagePicker
            files={fileList}
            length="3"
            selectable={fileList.length < 3}
            onChange={onChange}
            onImageClick={(index, fs) => console.log(index, fs)}
            accept="image/gif,image/jpeg,image/jpg,image/png"
          />
        </List>
        <List>
          <InputItem
            value={data.supervisor}
            type="text"
            editable={false}
          >
            督办人
          </InputItem>
          <InputItem
            value={data.executor}
            type="text"
            editable={false}
          >
            执行人
          </InputItem>
        </List>
        <div style={{ height: '10px' }}></div>
        <List>
          <InputItem
            value={data.review}
            type="text"
            editable={false}
          >
            审批人
          </InputItem>
          <InputItem
            value={data.endData}
            type="text"
            editable={false}
          >
            截止日期
          </InputItem>
        </List>
        <div style={{ height: '10px' }}></div>
        <List>
          <InputItem
            type="text"
            editable={false}
          >
            审批
          </InputItem>
          {conclusion.map(i => (
            <Checkbox.CheckboxItem key={i.value} checked={i.checked} onChange={() => chooseConclusion(i.value)}>
              {i.label}
            </Checkbox.CheckboxItem>
          ))}
        </List>
      </div>
    </>
  );
};

export default RiskReporting;

.am-input-control input{
  text-align: right !important;
}

图片
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design MobileReact 中也是可以使用 InfiniteScroll 组件的,其使用方法与上面在 React Native 中的基本相同,只是样式部分有所区别。 在 React 中,你可以使用以下代码来实现 InfiniteScroll 组件的基本使用: ```jsx import { InfiniteScroll } from 'antd-mobile'; class MyComponent extends React.Component { state = { list: [], // 列表数据 hasMore: true, // 是否还有更多数据 }; // 加载更多数据的回调函数 loadMore = () => { // 判断是否还有更多数据需要加载 if (!this.state.hasMore) { return; } // 加载数据 fetchData().then(data => { // 将新数据合并到原有数据中 const list = this.state.list.concat(data); // 更新组件状态 this.setState({ list: list, hasMore: data.length > 0, }); }); }; render() { return ( <InfiniteScroll style={{ height: 'calc(100vh - 45px)', overflow: 'auto' }} loadMore={this.loadMore} hasMore={this.state.hasMore} > {this.state.list.map(item => ( <div key={item.id}>{item.name}</div> ))} </InfiniteScroll> ); } } ``` 在上面的代码中,`loadMore` 函数通过调用 `fetchData` 函数异步加载数据,并将新数据合并到原有数据中。加载完成后,根据新数据的长度判断是否还有更多数据需要加载,并更新组件状态。 同时,还需要注意在组件状态中设置一个 `hasMore` 属性,用来控制是否还有更多数据需要加载。在 `loadMore` 函数中判断 `hasMore` 属性,如果为 `false`,则不会触发加载更多数据的操作。 希望这个示例能够帮助你使用 InfiniteScroll 组件在 React实现无限滚动的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值