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

React-native构造函数和componentWillReceiveProps之间的区别

别锐
2023-03-14

我在react native中开发了几个类,出现了以下问题:

class Foo extends Component {
  constructor(props) {
    super(props)
    this.state = {
      days: [{text: 'Sofort', id: 1, selected: true}, {text: 'Morgen', id: 2, selected: false}, {text: 'Montag', id: 3, selected: false}, {text: 'Samstag', id: 4, selected: false}, {text: 'Sonntag', id: 5, selected: false}]
    }
  }

  onDaySelection(selectedDay) {
    // some logic to change the selected day
  }

  render() {
    <Bar data={this.state.days} callback={this.onDaySelection(selectedDay)}>
  }
}

酒吧类:

class Bar extends Component {
  constructor(props) {
    super(props)

    let dataSource = new ListView.DataSource(
      {rowHasChanged: (r1, r2) => r1.id !== r2.id}
    )

    this.state = {
      dataSource: dataSource.cloneWithRows(this.props.days),
    }
  }

  componentWillReceiveProps(newProps) {
    let dataSource = new ListView.DataSource(
      {rowHasChanged: (r1, r2) => r1.id !== r2.id}
    )

    this.state = {
      dataSource: dataSource.cloneWithRows(newProps.days),
    }
  }

  renderRow(rowData) {
    let tick = rowData.selected? (
      <Image source={require('../assets/images/Checkbox.png')}/>
    ): (
      <Image source={require('../assets/images/CheckboxEmpty.png')}/>
    )
    return (
      <View>
        <TouchableOpacity
          onPress={ () => {this.props.callback(rowData)}}
          style={appStyles.flowRight}
        >
          {tick}
          <Text>{rowData.text}</Text>
        </TouchableOpacity>
      </View>
    )
  }

  render() {
    return (
      <ListView
      dataSource={this.state.dataSource}
      renderRow={this.renderRow.bind(this)}
      />
    )
  }
}
class CustomCarouselIndicator extends Component {

  constructor(props) {
    super(props)
  }

  render() {
    let indicatorArray = []
    for(let i = 0; i < this.props.length; i++) {
      indicatorArray.push(i)
    }

    let indicators = indicatorArray.map(index => {
      let isSelected = index == this.props.selected
      //Some more logic
    })

    return (
      <View style={[appStyles.flowRight, {flex: 1, justifyContent: 'center', alignItems:'center'}, this.props.style]}>
        {indicators}
      </View>
    )
  }
}

共有1个答案

楚泳
2023-03-14

构造函数只调用一次。每当更新道具时都会调用componentWillReceiveProps;这是这种逻辑的正确位置。

 类似资料:
  • 问题内容: 我一直在做大学项目的作业。有一次,当您实际上可以使用构造函数方法来实现相同的结果时,我对于getter和setter的实际使用感到困惑。我已经搜索并找到许多答案,但没有令人满意的解释。我有如下laptop.java 和laoptopRecords.java调用构造函数为 在这里,我没有使用getter和setter方法,并且为每个便携式计算机对象都获得了理想的结果。 如果我以如下方式在

  • 问题内容: 其实我不明白,无参数构造函数和默认构造函数有什么区别。 创建名为cFrame的Test对象时,这是否调用此类的默认构造函数? 问题答案: 该构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含对(not )的调用,这是默认行为。如果实现任何构造函数,则不再收到默认的构造函数。 JLS-8.8.9。默认构造函数说(部分), 如果一个类不包含构造函数声明,则隐式声明一个没有

  • 问题内容: 在同一个开发人员将RegExp字面量更改为构造函数调用后,我们最近遇到了一个错误,我想知道为什么根本没有区别。确切的代码是 与原始的 例如,当为时,第一个(越野车)呼叫返回,而第二个(返回) 不用说,我撤消了更改,但是我想知道为什么首先会有如此不同。 问题答案: 有两个问题: 的是 不 表达的一部分。它们是 分隔符 ,标记了正则表达式文字。如果使用则必须将其删除,否则它们在字面上会匹配

  • 问题内容: 我已经出于好奇而开始学习 React ,并且想知道React和React Native之间的区别- 尽管使用Google找不到满意的答案。React和React Native似乎具有相同的格式。它们的语法完全不同吗? 问题答案: ReactJS是一个JavaScript库,它支持前端Web并在服务器上运行,用于构建用户界面和Web应用程序。它遵循可重用组件的概念。 React Nati

  • 问题内容: 我见过两者可以互换使用。 两者的主要用例是什么?有优点/缺点吗?是更好的做法吗? 问题答案: 这两种方法不可互换。使用ES6类时,应在构造函数中初始化状态,并使用时定义方法。 请参阅有关ES6类的官方React文档。 相当于

  • 问题内容: 最近,我经常使用枚举。所以我想知道… 私有Enum构造函数和带有任何可见性修饰符(package-private)的枚举构造函数之间有什么区别吗? 问题答案: 根据java 文档 枚举类型的构造函数必须是程序包私有或私有访问。 但加入了JLS 如果没有为枚举类型的构造函数指定访问修饰符,则该构造函数为私有。 因此,package-private和private之间没有区别。