当前位置: 首页 > 知识库问答 >
问题:

React本机listview添加项不工作

邓俊英
2023-03-14

从“React-Native”导入React,{组件,样式表,文本,触摸高亮显示,文本输入,视图,列表视图,警报};

var LongButton=require('./LongButton.js');

类SurveyQn扩展组件{

constructor(props) {
    super(props);

    this.state = {
        options: [{option: 'Pizza'}],
    };
}

componentWillMount() {
    this.dataSource = new ListView.DataSource({
        rowHasChanged: (row1, row2) => row1 !== row2
    })
}

_renderItem(item) {
    return (
        <LongButton 
            text={item.option} 
            onPress={() => {}} 
            //btnViewStyle={styles.buttonView}
            //btnTextStyle={styles.buttonText}
        />
    );
}

_addItem() {
    AlertIOS.alert(
        'Add new option',
        null,
        [
            {
                text: 'Add',
                onPress: (text) => {
                    var options = this.state.options;
                    options.push({option: text})
                    this.setState({ options: options})
                }
            },
        ],
        'plain-text'
    );
}

render(){
    var dataSource = this.dataSource.cloneWithRows(this.state.options);
    return (
        <View style={styles.container}>
            <TextInput
                style={styles.question}
                placeholder="Question title"
                placeholderTextColor="#4B667B"
                selectionColor="#4B667B"
                onChangeText={(text) => this.setState({text})}/>

            <View style={styles.listView}>
                <ListView
                    dataSource={dataSource}
                    renderRow={this._renderItem.bind(this)}/>

            </View>
                <TouchableHighlight 
                    onPress={this._addItem.bind(this)}
                    style={styles.buttonView}
                    underlayColor='rgba(0,0,0,0)'>
                    <Text style={styles.buttonText}>
                        Add option
                    </Text>
                </TouchableHighlight>
        </View>


    );
}

ListView项:LongButton

“严格使用”

从“React-Native”导入React,{组件,样式表,文本,触摸亮点,视图,};

render(){
    return (
        <TouchableHighlight 
            onPress={this.props.onPress}
            style={this.props.btnViewStyle}
            underlayColor='rgba(0,0,0,0)'>
            <Text style={this.props.btnTextStyle}>
                {this.props.text}
            </Text>
        </TouchableHighlight>
    );

更新:我试过了,但也不起作用。可能是警报导致了这些问题吗?在点击BTN后,只需要花很长时间来呈现警报。

类SurveyQn扩展组件{

构造器(道具){超级(道具);

   this.state = {
       options: [{option: 'Pizza'}],
       dataSource : new ListView.DataSource({
           rowHasChanged: (row1, row2) => row1 !== row2
       })
   };
           <View style={styles.listView}>
               <ListView
                   dataSource={this.state.dataSource}
                   renderRow={this._renderItem.bind(this)}/>

           </View>
               <TouchableHighlight 
                   onPress={this._addItem.bind(this)}
                   style={styles.buttonView}
                   underlayColor='rgba(0,0,0,0)'>
                   <Text style={styles.buttonText}>
                       Add option
                   </Text>
               </TouchableHighlight>
       </View>


   );

共有1个答案

赫连正初
2023-03-14

在深入研究复杂的EcmaScript表示法之前,可以使用简单表示法。下面是ListView的一个简单示例。请通过它,并了解它是如何工作的。

var API = require('./API');
module.exports = React.createClass({
  getInitialState: function(){
    return {
      rawData: [],
      dataSource: new ListView.DataSource({
        rowHasChanged: (row1, row2) => row1 !== row2
      }),
      loaded: false,
    }
  },
  componentWillMount: function(){
    this.loadData();
  },
  loadData: function(){
    API.getItems()
    .then((data) => {
      this.setState({
        rawData: this.state.rawData.concat(data),
        dataSource: this.state.dataSource.cloneWithRows(data),
        loaded: true,
      });
    });
  },
  render: function(){
    return(
        <ListView 
          dataSource={this.state.dataSource}
          renderRow={this.renderItem}
          style={styles.listView}>
        </ListView> 
    );
  },
  renderItem: function(item){
    return (
      <View>
          <Text>Custom Item</Text>
      </View>
    );
  },
}

在api.js中,我从API中获取数据。

getItems: function(){
        var REQUEST_URL = 'http://api.example.org/item/get?api_key=xxxx;
        return fetch(REQUEST_URL)
            .then((response) => response.json())
            .then((responseData) => {
                return responseData.results.sort(sortByDate);
            });
    }

代码可能无法工作,因为我没有测试过。但是您可以在GitHub上参考我的示例项目。回购

 类似资料:
  • 我的简单web应用程序 此web应用程序托管在:https://popping-heat-6062.firebaseapp.com/ 我的简单React本机应用程序 预期结果 null 实际效果 Web应用程序成功地将发送消息发送到响应本机应用程序,并将消息记录在调试器窗口中 React本机应用程序未成功将消息发送到web应用程序,并且未在web文本中打印出来 有人知道为什么web应用程序没有收到

  • 问题内容: 这是我第一次接触android。我正在尝试向我的ListView添加项目。我使用“选项卡”,查看添加项目的唯一方法是更改​​选项卡,然后返回到第一个选项卡。 我到处搜寻,而且一直都找到 但对我不起作用。 正如我所说,我已经使用固定标签+滑动创建了项目。我只希望有一个列表视图,哪些行具有一个EditText,一个Spinner和一个Button。在用于选项卡的Fragment的底部,我有

  • 但现在我正试图从yarn add@react native community/async storage添加异步存储,这给了我一个错误。它没有添加到我的项目中。 我在安装软件包时并没有收到任何错误,但它并没有添加到软件包中。json文件我还尝试添加本机基,然后运行react-native链接,该链接也没有添加到包中。json,它也给了我错误: > 警告包@react native communi

  • 在这个构建中使用了不推荐的Gradle特性,使其与Gradle7.0不兼容。使用“--Warning-Mode All”显示各个弃用警告。请参见https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings440可操作任务:22个已执行,418最新注意:c:\users\stef

  • 你好,我正面临一个问题与世博反应本地。每当我试图启动iOS模拟器。我得到这个错误: 世博会结果截图 我的NPM版本是6.7。0本机cli:2.0。1:0.57。1世博会版本2.11。9 此外,我还确保我在Xcode上的命令行工具是完全由Xcode命令行工具设置的 最后,我还尝试运行命令 什么都不管用。。

  • 我试图获得卡的列表,并尝试使用小部件,但有错误 我的代码: 我得到的错误是: