antd使用

1.Tooltip的getPopupContainer改變浮層渲染父節(jié)點

getPopupContainer={trigger => trigger.parentNode}

// 往上幾個父節(jié)點的話
getPopupContainer={trigger => trigger.parentNode.parentNode.parentNode.parentNode}

2. antd中select

  • 設置了value之后,defaultValue就不起作用了

  • 設置了value并且value不為undefined之后爆办,placeholder就不顯示了,所以可以value=value || undefined

this.state = {
    dataReportType: '',
}

 ....
<Select
    onChange={this.handleChange}
    placeholder="請選擇報表類型" 
    value={dataReportType || undefined}
>

3. antd中的description

對于label和content的寬度余佃,我們想著table中每一行中每一個td可以設置百分比的寬度咙冗,總和為100%即可

4. ant-table

1).設置table中某個td的寬度

有時設置width不起作用漂彤。加上display:table-cell;

設置width并超出顯示省略號挫望,官網給出討論https://github.com/ant-design/ant-design/issues/13825

 .ant-table-fixed {
    table-layout: fixed;
}

.ant-table-tbody > tr > td {
    word-wrap: break-word;
    word-break: break-all;
}

2).頭根據篩選條件的變化而變化

const columns1 = [{
    title: '客戶碼',
    dataIndex: 'customerCode',
    key: 'customerCode',
}, {
    // title: '持倉量(買/賣)',
    title: ({filters}) => {
        return (!filters.openInterestCount || filters.openInterestCount.length === 2 ) ? "持倉量(買/賣)"
        :
        <span>持倉量(買/賣){
            (['買', '賣'][filters.openInterestCount[0]]) ? ('-(' + ['買', '賣'][filters.openInterestCount[0]] + ')') : ''
    }</span>},
    dataIndex: 'openInterestCount',
    key: 'openInterestCount',
    filters: [{
        text: '買',
        value: '0',
    }, {
        text: '賣',
        value: '1',
    }],
    filterMultiple: true, //是否多選默認true
    // filterIcon: (filtered) => <Icon type="smile-o" theme="outlined" style={{ color: filtered ? '#108ee9' : '#aaa' }} />,
    onFilter: (value, record) => record.openInterestCountFlag == value,
}];

3). ant design 中table表頭進行請求篩選

...
filterPositon = (selectedKeys, confirm) => {
    let titles = selectedKeys;
    confirm();
}
...
const columns11 = [{
    title: '客戶碼',
    dataIndex: 'customerCode',
    key: 'customerCode',
    width: '55%'
}, {
    title: () => (<span>持倉量{this.state.positionTitle}</span>),
    dataIndex: 'positions',
    key: 'positions',
    width: '45%',
    render: (text, record) => {
        return (
            <span>{text && (isNaN(Number(text))) && mining.utils.forMatMoney(Number(text))}</span>
        )
    },
    filterDropdown: ({
        setSelectedKeys,
        selectedKeys,
        confirm,
        clearFilters
    }) => (
        <div className="position-filter">
            <RadioGroup onChange={e => setSelectedKeys(e.target.value)} defaultValue="0">
                <Radio value="0">買/賣</Radio>
                <Radio value="1">買/賣</Radio>
                <Radio value="2">買/賣</Radio>
            </RadioGroup>
            <Button onClick={this.filterPositon(selectedKeys, confirm)}>確定</Button>
        </div>
    )
 }];

4).點擊行媳板,并添加活躍的行樣式

activeRow (record, index){
    return this.state.activeRow === index ? 'active-row': '';
}
showCurrentDetails(record, index, e){
    //...
    e.stopPropagation();
}
...

return(
    <div className={'wrapper-trade'}>
        <Table
            dataSource={dataSource}
            columns={columns1}
            pagination={false}
            locale={{emptyText: '沒有數據'}}
            rowClassName={(record, index) => this.activeRow(record, index)}
            onRow={(record, index) => {
                return {
                    onClick: (e) => this.showCurrentDetails(record, index, e)
                }
            }}
            scroll={{ y: '90%' }}>
        </Table>
    </div>
)

5).Tabel上綁定onClick方法不可用蛉幸,可外加div綁定

6).ant-table column設置

當書寫render時,當此列沒有key值時奕纫,render的參數為(record),當有key值時,render的參數為(text,render)

7).ant-table點擊行選中

官網給出的行選中


const columns = [...];

class App extends React.Component {
  state = {
    selectedRowKeys: [],
  };
  selectRow = (record) => {
    const selectedRowKeys = [...this.state.selectedRowKeys];
    if (selectedRowKeys.indexOf(record.key) >= 0) {
      selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);
    } else {
      selectedRowKeys.push(record.key);
    }
    this.setState({ selectedRowKeys });
  }
  onSelectedRowKeysChange = (selectedRowKeys) => {
    this.setState({ selectedRowKeys });
  }
  render() {
    const { selectedRowKeys } = this.state;
    const rowSelection = {
      selectedRowKeys,
      onChange: this.onSelectedRowKeysChange,
    };
    return (
      <Table
        rowSelection={rowSelection}
        columns={columns}
        dataSource={data}
        onRow={(record) => ({
          onClick: () => {
            this.selectRow(record);
          },
        })}
      />
    );
  }
}

          

常用寫法:

this.state={
    selectedRowKeys: [], 
    selectData: [],
}
....

// 選中行
handleCheck = (selectedRowKeys, selectedRows) => {
    this.setState({
        selectedRowKeys,
        selectData: [...selectedRows],
    })
}

// 清除選中的
clearSelectRow =() => {
    this.setState({
        selectData: [],
        selectedRowKeys: []
    })
}
...



<Table
rowSelection= {
    selectedRowKeys,
    onChange: this.handleCheck,
    fixed: true
}
/>

單選的時候,可簡化handleRowClick:

handleRowClick = (record) => {
    const selectedRowKeys = []
    selectedRowKeys.push(record.key)
    this.setState({ 
        selectedSecondRowKeys: selectedRowKeys,
        stepLastSelected: [record]
    })
}

8).antd中pagination分頁pageSizeOptions

pageSizeOptions: [20, 50, 100],

上述選中的可以顯示為20,只在下拉選項時添加“頁/條”

pageSizeOptions: ['20', '50', '100'],

9).antd中固定列寬度影響篩選圖標顯示

問題描述:
最后一列為操作列升筏,固定在最右邊,隨著項目復雜铅忿,從3個操作增加為4個了灵汪,然后緊跟在操作列前面的一列篩選列的篩選圖標被遮擋了,不明白為啥识虚。。蔚晨。肛循。铭腕?

問題解決:最終發(fā)現累舷,是只給操作增加了內容夹孔,沒有增加操作列的寬度導致的,所以增加操作列的寬度到合適即可搭伤。

10).ant-table使table占滿div進行滾動,有固定列情況

一般都是除了導航和查詢的地方怜俐,剩下的地方container全部是table的,此時洗完滾動根據container的高度自適應變化而調整贴谎,而且不滾動時,分頁在頁面最底部,此時需要增加樣式:

.ant-table-wrapper,
.ant-spin-nested-loading,
.ant-spin-container,
.ant-table,
.ant-table-content,
.ant-table-scroll {
  height: 100%;
}

將table配置中scroll: { y: 'calc(100% - 46px)' },46是因為每行高是46

此時左或右固定時滾動會出現錯位擅这,增加樣式:

.ant-table-fixed-left,
.ant-table-fixed-right {
  height: calc(100% - 8px);

  .ant-table-body-outer {
    height: 100%;
  }

  .ant-table-body-inner {
    overflow: auto !important;
  }
}

5.form校驗-一行寫多個檢驗

每個formitem中只能寫一個校驗
參見例子 一行寫兩個

Row一行,Col兩個即兩列總共24

<Row gutter={8}>
    <Col span={7}>
        <Form.Item label="output:">
            {getFieldDecorator('outputFirstValue', {
                initialValue: ioFisrtSelDef[0],
            })(
                <Select
                    showSearch
                    optionFilterProp="children"
                    onChange={value => this.handleSelectChange(value, -1)}
                    labelInValue
                    disabled={editFlag && !valid}
                >
                    {this.setOptions(ruleOutputCandidates)}
                </Select>
            )}
        </Form.Item>
    </Col>
    <Col span={17}>
        <Form.Item {...addRuleSecondLayout}>
            {getFieldDecorator('outputSecondValue', {
                initialValue: ioSecondSelDef[0],
                rules: ioSecondValueDis[0] && [
                    { required: true, message: '請輸入自定義輸出!' },
                    { validator: this.validateOutput, }
                ],
            })(
                <Input type="text" className="rule-input" disabled={(editFlag && !valid) || ioSecondValueDis[0] !== 1} /> 
            )}
        </Form.Item>
    </Col>
</Row>

上述選中的可以顯示為20頁/條

6.select選中值拿取當前行其他值

描述一個自己思路轉不過來的坑-----

問題描述:

const optionDatas = [
    {text:'aaaaa',id:1,params:['aad','bubu'],val: 'dada'},
    {text:'nnnnn',id:2,params:['daf','bubus'],val: 'dsada'},
    ....
]


<Select
    value={similarRate}
    className="min-select"
    onChange={this.handleChange}
>
    {optionDatas.map((item, index) => (
        <Option value={item.id} key={`match${index}`}>
            {text}
        </Option>
    ))}
</Select>

往往optionDatas是一個對象數組,同時谭确,顯示的是text,value是一個id之類的值逐哈,但是在選中值后,我們某時會需要取得選中的這條數據中的其他值如params禀梳,此時肠骆,思路需要轉坑---value可以改,
value={index},handleChange時蚀腿,選中的paramsoptionDatas[index].params;

(復雜(或者多個select時)時可以使用value={{item.id}-{index}},此時split('-')可以拿到id和index廓脆。)

7. Dropdown的menu是一個組件時

Dropdown的menu是一個組件時磁玉,點擊item之后,下拉框并不會自動收起蚊伞,解決辦法,Dropdown和menu寫在一個組件中厚柳。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末别垮,一起剝皮案震驚了整個濱河市碳想,隨后出現的幾起案子烧董,更是在濱河造成了極大的恐慌胧奔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胳泉,死亡現場離奇詭異,居然都是意外死亡扇商,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門案铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梆靖,“玉大人,你說我怎么就攤上這事返吻。” “怎么了测僵?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵恨课,是天一觀的道長。 經常有香客問我希俩,道長,這世上最難降的妖魔是什么颜武? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任拖吼,我火速辦了婚禮,結果婚禮上吊档,老公的妹妹穿的比我還像新娘。我一直安慰自己鬼贱,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布舟误。 她就那樣靜靜地躺著姻乓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹋岩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天星澳,我揣著相機與錄音,去河邊找鬼禁偎。 笑死,一個胖子當著我的面吹牛笆檀,可吹牛的內容都是我干的。 我是一名探鬼主播酗洒,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼樱衷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矩桂?” 一聲冷哼從身側響起痪伦,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎癞蚕,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體桦山,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡度苔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年浑度,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箩张。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡先慷,死狀恐怖,靈堂內的尸體忽然破棺而出论熙,到底是詐尸還是另有隱情,我是刑警寧澤脓诡,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布祝谚,位于F島的核電站,受9級特大地震影響交惯,放射性物質發(fā)生泄漏。R本人自食惡果不足惜意荤,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一只锻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炬藤,春花似錦、人聲如沸上真。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寇壳,卻和暖如春妻怎,著一層夾襖步出監(jiān)牢的瞬間壳炎,已是汗流浹背逼侦。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工榛丢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晰赞。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓掖鱼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锨用。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355