React-native将getInitialState(ES5)转换为构造函数(ES6)“ ListView”

MDK

真正了解React-native,但在将getInitialState转换为构造函数时遇到了一些问题。我在可滑动行的ListView上工作。它与getInitialState一起使用,但不适用于构造函数。

转换后的代码:

'use strict';

var React = require('react-native');
var {
    StyleSheet,
    ListView,
    Text,
    View,
} = React;

var styles = StyleSheet.create({
    container: {
        backgroundColor: '#f2f2f2',
        flex: 1,
    },
    listview: {
        flex: 1,
    },
    li: {
        backgroundColor: '#fff',
        borderBottomColor: '#eee',
        borderColor: 'transparent',
        borderWidth: 1,
        paddingLeft: 16,
        paddingTop: 14,
        paddingBottom: 16,
    },
    liText: {
        color: '#333',
        fontSize: 16,
    },
    statusbar: {
        backgroundColor: '#fff',
        height: 22,
    }
})

var btnsTypes = [
    {text: 'Primary', type: 'primary',},
    {text: 'Secondary', type: 'secondary',},
    {text: 'Delete', type: 'delete',}
]


var rows = [
    {
        text: "Buttons swipe left",
        right: btnsTypes,
    },
    {
        text: "Buttons swipe left",
        right: btnsTypes,
    }
]

//  include react-native-swipeout
var Swipeout = require('react-native-swipeout')


//  example swipout app
class swipeoutExample extends React.Component {

    constructor(){
        super()
        var ds = new ListView.DataSource({rowHasChanged: (row1, row2) => true})

        this.state = {
            dataSource: ds.cloneWithRows(rows),
            scrollEnabled: true
        };
    }


//  set scrolling to true/false
    _allowScroll (scrollEnabled) {
        this.setState({ scrollEnabled: scrollEnabled })
    }

//  set active swipeout item
    _handleSwipeout (rowID) {
        for (var i = 0; i < rows.length; i++) {
            console.log(rowID)
            if (i != rowID) rows[i].active = false
            else rows[i].active = true
        }
        this._updateDataSource(rows)
    }

    _updateDataSource (data) {
        this.setState({
            dataSource: this.state.dataSource.cloneWithRows(data)
        })
    }

    _renderRow (rowData: string, sectionID: number, rowID: number) {
        return <Swipeout
            left={rowData.left}
            right={rowData.right}
            rowID={rowID}
            sectionID={sectionID}
            autoClose={rowData.autoClose}
            backgroundColor={rowData.backgroundColor}
            close={!rowData.active}
            onOpen={(sectionID, rowID) => this._handleSwipeout(rowID)}
            scroll={event => this._allowScroll(event)}>
            <View style={styles.li}>
                <Text style={styles.liText}>{rowData.text}</Text>
            </View>
        </Swipeout>
    }

    render () {
        return (
            <View style={styles.container}>
                <View style={styles.statusbar}/>
                <ListView
                    scrollEnabled={this.state.scrollEnabled}
                    dataSource={this.state.dataSource}
                    renderRow={this._renderRow}
                    style={styles.listview}/>
            </View>
        )
    }
}

module.exports = swipeoutExample;

错误信息:

错误信息:

有效的getInitialState:

var swipeoutExample = React.createClass({
    getInitialState: function() {
        //  datasource rerendered when change is made (used to set     swipeout to active)
        var ds = new ListView.DataSource({rowHasChanged: (row1, row2)    => true})

        return {
            dataSource: ds.cloneWithRows(rows),
            scrollEnabled: true
        }
    }

我已经尝试了所有内容,并且所有内容都应该相同,但一如既往。希望任何人都能提供帮助。尝试了一切。

刚无聊

您的问题与无关getInitalState问题是在ES6类中,React不会将您的方法绑定到this因此_renderRow,在错误的上下文中调用了您的方法。

您可以通过在以下内容中添加以下内容来修复此问题: constructor

constructor() {
    super()
    var ds = new ListView.DataSource({rowHasChanged: (row1, row2) => true})
    this.state = {
        dataSource: ds.cloneWithRows(rows),
        scrollEnabled: true
    };

    this._renderRow = this._renderRow.bind(this); // <- now your method always save context of this class
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

转换为es6后,React js getInitialState无法正常工作

来自分类Dev

React Native ES5 vs ES6解释要求

来自分类Dev

React Native Listview留下空间

来自分类Dev

React-Native ListView键

来自分类Dev

react-native ListView换行

来自分类Dev

React Native:更新ListView问题

来自分类Dev

React Native:如何专注于ListView?

来自分类Dev

如何在React中将箭头函数转换为ES5函数

来自分类Dev

将React JSX组件转换为ES5 USBa Babel

来自分类Dev

使用Realm Listview优于标准React Native Listview的好处

来自分类Dev

将 ES6 箭头函数转换为 ES5 函数 JavaScript

来自分类Dev

设置React Native ListView的初始滚动位置

来自分类Dev

React Native:如何禁用ListView中的滚动?

来自分类Dev

React Native的ListView.DataSource循环数据

来自分类Dev

React Native ListView get visible rows

来自分类Dev

React Native:更改ListView项目的样式

来自分类Dev

在React Native中从Web服务填充ListView

来自分类Dev

React Native ListView自定义

来自分类Dev

React Native ListView获取可见行

来自分类Dev

React Native ListView性能太慢吗?

来自分类Dev

React Native-Listview下拉刷新多次

来自分类Dev

ListView行未在React Native中呈现

来自分类Dev

在react-native中正确对齐ListView

来自分类Dev

在React Native中删除ListView项目

来自分类Dev

React Native:ListView在设置dataSource之前渲染

来自分类Dev

react native 从 SQLite 动态更改 ListView

来自分类Dev

开关的 React-Native ListView 不更新

来自分类Dev

未调用 React Native ListView onEndReached

来自分类Dev

带有 React Native 的 JsonArray Listview?