鍍金池/ 問答/HTML/ Antd-mobile ListView與TabBar組件一起使用,不加載

Antd-mobile ListView與TabBar組件一起使用,不加載

想將ListView與TabBar結(jié)合使用
用官網(wǎng)的demo,結(jié)果發(fā)現(xiàn)ListView不能加載
經(jīng)過測試,發(fā)現(xiàn)應(yīng)該是最外層的<div>導(dǎo)致的,最外層的<div>是讓tabbar置于頁面底部的
初學(xué)前端,求大神指點(diǎn)~ 謝謝~

代碼如下:

const data = [
    {
        img: 'https://zos.alipayobjects.com/rmsportal/dKbkpPXKfvZzWCM.png',
        title: 'Meet hotel',
        des: '不是所有的兼職汪都需要風(fēng)吹日曬',
    },
    {
        img: 'https://zos.alipayobjects.com/rmsportal/XmwCzSeJiqpkuMB.png',
        title: 'McDonald\'s invites you',
        des: '不是所有的兼職汪都需要風(fēng)吹日曬',
    },
    {
        img: 'https://zos.alipayobjects.com/rmsportal/hfVtzEhPzTUewPm.png',
        title: 'Eat the week',
        des: '不是所有的兼職汪都需要風(fēng)吹日曬',
    },
];
const NUM_ROWS = 20;
let pageIndex = 0;

function genData(pIndex = 0) {
    const dataBlob = {};
    for (let i = 0; i < NUM_ROWS; i++) {
        const ii = (pIndex * NUM_ROWS) + i;
        dataBlob[`${ii}`] = `row - ${ii}`;
    }
    return dataBlob;
}

class Demo extends React.Component {
    constructor(props) {
        super(props);
        const dataSource = new ListView.DataSource({
            rowHasChanged: (row1, row2) => row1 !== row2,
        });

        this.state = {
            dataSource,
            isLoading: true,
        };
    }

    componentDidMount() {
        // you can scroll to the specified position
        // setTimeout(() => this.lv.scrollTo(0, 120), 800);

        // simulate initial Ajax
        setTimeout(() => {
            this.rData = genData();
            this.setState({
                dataSource: this.state.dataSource.cloneWithRows(this.rData),
                isLoading: false,
            });
        }, 600);
    }

    // If you use redux, the data maybe at props, you need use `componentWillReceiveProps`
    // componentWillReceiveProps(nextProps) {
    //   if (nextProps.dataSource !== this.props.dataSource) {
    //     this.setState({
    //       dataSource: this.state.dataSource.cloneWithRows(nextProps.dataSource),
    //     });
    //   }
    // }

    onEndReached = (event) => {
        // load new data
        // hasMore: from backend data, indicates whether it is the last page, here is false
        if (this.state.isLoading && !this.state.hasMore) {
            return;
        }
        console.log('reach end', event);
        this.setState({ isLoading: true });
        setTimeout(() => {
            this.rData = { ...this.rData, ...genData(++pageIndex) };
            this.setState({
                dataSource: this.state.dataSource.cloneWithRows(this.rData),
                isLoading: false,
            });
        }, 1000);
    }

    render() {
        const separator = (sectionID, rowID) => (
            <div
                key={`${sectionID}-${rowID}`}
                style={{
                    backgroundColor: '#F5F5F9',
                    height: 8,
                    borderTop: '1px solid #ECECED',
                    borderBottom: '1px solid #ECECED',
                }}
            />
        );
        let index = data.length - 1;
        const row = (rowData, sectionID, rowID) => {
            if (index < 0) {
                index = data.length - 1;
            }
            const obj = data[index--];
            return (
                <div key={rowID} style={{ padding: '0 15px' }}>
                    <div
                        style={{
                            lineHeight: '50px',
                            color: '#888',
                            fontSize: 18,
                            borderBottom: '1px solid #F6F6F6',
                        }}
                    >{obj.title}</div>
                    <div style={{ display: '-webkit-box', display: 'flex', padding: '15px 0' }}>
                        <img style={{ height: '64px', marginRight: '15px' }} src={obj.img} alt="" />
                        <div style={{ lineHeight: 1 }}>
                            <div style={{ marginBottom: '8px', fontWeight: 'bold' }}>{obj.des}</div>
                            <div><span style={{ fontSize: '30px', color: '#FF6E27' }}>{rowID}</span>¥</div>
                        </div>
                    </div>
                </div>
            );
        };
        return (

            <div style={{ position: 'fixed', height: '100%', width: '100%', top: 0 }}>
                <TabBar
                    unselectedTintColor="#929292"
                    tintColor="#ff0000"
                    barTintColor="#f7f7f7"
                >
                    <TabBar.Item
                        title="商城"
                        key="Home"
                        icon={
                            <i className="iconfont icon-5gouwudai2" />
                        }
                        selectedIcon={
                            <i className="iconfont icon-5gouwudai2" />
                        }
                        selected={this.state.selectedTab === 'homeTab'}
                        onPress={() => {
                            this.setState({
                                selectedTab: 'homeTab',
                            });
                        }}
                    >
                        <ListView
                            ref={el => this.lv = el}
                            dataSource={this.state.dataSource}
                            renderHeader={() => <span>header</span>}
                            renderFooter={() => (<div style={{ padding: 30, textAlign: 'center' }}>
                                {this.state.isLoading ? 'Loading...' : 'Loaded'}
                            </div>)}
                            renderRow={row}
                            renderSeparator={separator}
                            className="am-list"
                            pageSize={4}
                            useBodyScroll
                            onScroll={() => { console.log('scroll'); }}
                            scrollRenderAheadDistance={500}
                            onEndReached={this.onEndReached}
                            onEndReachedThreshold={10}
                        />
                    </TabBar.Item>

                    <TabBar.Item
                        title="我的"
                        key="Mine"
                        icon={
                            <i className="iconfont icon-gerenzhongxin" />
                        }
                        selectedIcon={
                            <i className="iconfont icon-gerenzhongxin" />
                        }
                        selected={this.state.selectedTab === 'mineTab'}
                        onPress={() => {
                            this.setState({
                                selectedTab: 'mineTab',
                            });
                        }}
                    >
                        {/* 個(gè)人中心 */}
                        個(gè)人中心
                    </TabBar.Item>
                </TabBar>
            </div>

        );
    }
}

ReactDOM.render(<Demo />, document.getElementById('root'));
回答
編輯回答
黑與白

你把ref={el => this.lv = el}改成 ref={el => { this.lv = el; return this.lv }}試試,你如果放在TabBar里面,ListView要用自定義容器,不能使用body的。

2018年4月18日 18:14