【问题标题】:how to change text of button in listview in react native?如何在本机反应中更改列表视图中按钮的文本?
【发布时间】:2018-01-18 17:01:42
【问题描述】:

我想在点击后快速更改列表视图中按钮的文本?

我正在尝试使用以下代码来实现这一点,但我做不到,即它不起作用。我该怎么做?请帮忙。

constructor(props) {
    super(props);
    this.state = {
      button_text:"Connect",
    }
  }

  ConPressed() {
    this.setState({
      button_text: "Connected",
    });
  }

  render() {
    return (
      <ListView
        dataSource={this.state.sa}
        renderRow={(rowData) => 

       <TouchableHighlight onPress={() => this.ConPressed()}>
          <Text>{this.state.button_text}</Text>
       </TouchableHighlight>

      />
    );
  }

【问题讨论】:

    标签: listview react-native react-native-listview


    【解决方案1】:
    export default class ListItem extends Component {
      constructor(props) {
        super(props);
    
        this.state = {
          button_text: 'Connect',
        }
      }
    
    
      ConPressed = () => {
        this.setState({ button_text: 'Connected' });
      }
    
    
      render() {
        return (
          <TouchableHighlight onPress={this.ConPressed}>
            <Text>{this.state.button_text}</Text>
          </TouchableHighlight>
        );
      }
    }
    

    所以现在你想在你的原始文件中导入你的 ListItem,并在你的renderRow 中使用它。

    renderRow={() =&gt; &lt;ListItem /&gt;}

    【讨论】:

    • @mayureshpatil 没问题 :)
    • @MattyK14 在不按 TouchableOpacity 的情况下调用 onPress 方法会出现问题。
    • @MattyK14 不按可触摸不透明度就调用它,它调用屏幕初始化。
    • @Rushitrivedi 你有一个胖箭头函数:= () =&gt; 吗?如果没有,你是bind(this)吗?
    【解决方案2】:

    在您的可触摸代码中,您传递的是方法执行而不是方法引用。

    <TouchableHighlight
    onPress={() => this.ConPressed()}>
    <Text>{this.state.button_text}</Text>
    </TouchableHighlight>
    

    这意味着 conPressed 将在组件安装后立即执行,这可能是您收到错误的原因。尝试将其更改为

    <TouchableHighlight
    onPress={() => this.ConPressed}>
    <Text>{this.state.button_text}</Text>
    </TouchableHighlight>
    

    还有

    this.ConPressed = this.ConPressed.bind(this)
    

    在你的构造函数中

    【讨论】:

    • 您能确认按下按钮时会调用 ConPressed 吗?
    • 是的,我使用的和你在回答中给出的一样,它被TouchableHighlight调用,即按下按钮。
    【解决方案3】:

    ConPressed() 绑定到范围。

    constructor(props) {
        super(props);
        this.state = {
            button_text:"Connect",
        }
        this.ConPressed = this.Conpressed.bind(this);
    }
    

    【讨论】:

    • 感谢您的回复。但它不工作它显示错误TypeError: undefined is not an object (evaluating '_this.Conpressed.bind')
    • 对不起,我错过了一个字符 this.ConPressed = this.Con"P"ressed.bind(this); :)
    • 是的,我做到了。但它也不起作用,按下它后显示相同的文本connect。哪里出了问题?
    • 你能像这样https://snack.expo.io/SywBhpMgW举办在线零食博览会吗?这对我有很大帮助......
    • 我发现问题很明显,当一行已经渲染时你不能更新它的道具,你需要创建一个新对象
    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多