javascript - 状态数组中的更改元素不会触发 UI 更改

标签 javascript reactjs react-native

我有一个 ListView 组件,其中我需要根据 onPress 事件独立更改每行的背景颜色。

<View style = {[styles.checkBox, {backgroundColor: this.state.button[rowID]? '#62C6C6':'transparent'}]}/>

因为我不知道会渲染多少行,但最多有4行,所以我声明了一个数组状态button[false, false, false, false] 并根据行更改元素值。例如,当我按下第一行时,rowID为0,我会将button的状态设置为[true, false, false, false]。在此方法中,button 的状态发生更改,但 UI 不会重新呈现背景颜色。 我认为这里的逻辑是正确的(是吗?),有什么方法可以得到预期的结果或者有更聪明的方法来实现这一点

最佳答案

建议创建您自己的组件以在每行内呈现,并且仅在单击时更改该组件的背景。这意味着您不需要保留每个组件本身的状态数组。

这将是您的组件:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      backgroundColor:'transparent'
    }
  }

  render() {
    return (
      <View style={{ backgroundColor: this.state.backgroundColor}}>
        <TouchableOpacity onPress={this.changeColor.bind(this)}>
            <Text>This is my Component</Text>
        </TouchableOpacity>
      </View>
    );
  }

  changeColor(){
    this.setState({
      backgroundColor:'#62C6C6'
    });
  }
}

然后在 renderRow 中你可以调用你的组件:

renderRow(rowData){
 return(
  <View>
    <MyComponent/>
  </View>
 )
}

关于javascript - 状态数组中的更改元素不会触发 UI 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686956/

相关文章:

javascript - 如何修复 React Native 中的 'undefined is not an object' 错误

reactjs - 当我尝试在 ReactJs 应用程序中定义 pointerEvent 属性时出错

javascript - 如何使用 ReactJS 从动态创建的输入中获取值

react-native - react 原生中 TextInput 上的 PanResponder

javascript - X 秒后刷新选择元素

javascript - 为什么我的对象的值是函数而不是字符串?

ios - 未找到团队 "XXX"具有 AppStore 连接访问权限的帐户

javascript - RxJs:依次执行 3 个可观察对象,并在第二个请求中使用第一个,在第三个请求中使用第一个和第二个的结果

javascript - Sencha Touch 2.2 列表不重用列表项

javascript - 确定 LI 是否溢出的函数