首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView动态样式react-native

ListView动态样式react-native
EN

Stack Overflow用户
提问于 2017-06-01 11:46:05
回答 1查看 957关注 0票数 0

在我的项目中,我试图改变我的ListView的背景颜色。颜色已经在一个数组中,在组件中我首先得到兰德数,这样每次用户打开组件时,它都会以不同的颜色开始。

如何在每次调用renderRow时更改颜色的状态。我尝试添加一个setState,但它导致了最大的调用堆栈错误。

代码语言:javascript
复制
constructor(props){
  super(props);
  const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
  this.state = {
      color: null,
  }
}

componentWillMount() {
    var rand = Math.floor((Math.random()*8)+1);
    this.setState({ color: rand});
  }

  _renderRow ( rowData, rowId, rowColumn) {
    var temp=(this.state.color+1)%8;
    this.setState({color: temp});
    return (
      <View style={{ backgroundColor: backColor[temp] ,paddingVertical: 10, paddingHorizontal: 10, marginBottom: 10, borderRadius: 5 }}>
        <Text>{rowData.name}</Text>
      </View>
    )
  }

 render() {

    return (
      <ListView
        dataSource={this.state.dataSource}
        renderRow={this._renderRow.bind(this)}
        style={styles.mainContainer}
      />
    );
  }

}

有谁能给我指个方向吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-01 14:11:23

基本上我是按照安德鲁的建议..

我创建了一个存储视图的子组件,并从父组件调用并发送props。为了对颜色进行随机化,我只需对包含颜色的数组进行打乱,所有内容都能完美地工作。

就像这样:

代码语言:javascript
复制
render() {
    this.shuffle(backColor);
    var card =[];

    for(var i=0;i<inspirationArr.length;i++) {
      card.push(<CardBoard color={backColor[i%8]} name={arr[i].name} />);
    }

    return <ScrollView style={styles.mainContainer}>{card}</ScrollView>;
}

class CardBoard extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      color: props.color,
      name: props.name,
    }
  }

  render() {
    return (
      <View style={{ backgroundColor: this.state.color }}>
        <Text style={styles.nameText}>{this.state.name}</Text>
      </View>
    );
  }
}

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44298183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档