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

子组件在数组响应本机时不更新

戚甫
2023-03-14

我正在尝试更新具有父状态的道具的子组件。当用setstate()将父级的状态更改为my knowlage时,chlid应该重新执行。但是,当child位于数组中时,rerender不会Occure。我怎么才能修好?提前谢了。

class Child extends Component {
  render() {
    return(
      <Text>{this.props.state.isActive.toString()}</Text>
    )
  }
}
class Parent extends Component {

  state = {
    isActive: false
  }

  children = []


  constructor(props) {
    super(props)
    this.createChildren()
    this.changeState()
  }

  changeState() {
    this.change = setInterval(() => {
      if(this.state.isActive){
        this.setState({isActive: false})
      } else {
        this.setState({isActive: true})
      }
    }, 1000)
  }


  componentWillUnmount() {
    clearInterval(this.change)
  }

  createChildren() {
    for(let i=0; i<5; i++) {
      this.children.push(<Child key={i} state={this.state}/>)
    }
  }

  render() {
    return(
      <View>
        {this.children}
      </View>
    )
  }
}

我的app功能:

export default function App() {
  return (
    <View style={style.conteiner}>
      <Parent/>
    </View>
  );
} 

共有1个答案

霍建章
2023-03-14

在呈现过程中应该始终创建React元素。不要将它们存储在属性或组件状态中:

  renderChildren = () => {
    children = [];

    for(let i=0; i<5; i++) {
      children.push(<Child key={i} state={this.state}/>)
    }

    return children;
  }

  render() {
    return(
      <View>
        {this.renderChildren()}
      </View>
    )
  }

您基本上总是呈现您在构造函数中创建的相同元素(这也是一种反模式)。

 类似资料:
  • 问题内容: 我开始学习React Native,并为我的项目创建了一个简单的Button组件以在项目中重用。我根据变量“ disabled”动态设置了不透明度值,但是,按钮的外观并未随着不透明度变量的值而改变。我四处搜寻,但没有找到解释。 任何帮助将不胜感激。 这是我的源代码: 编辑:这是调用按钮的代码 如果newDeck组件的标题为空或null,则禁用的变量为true。当此变量为true时,按钮

  • 我对JS的反应有点陌生。我有两个问题。我来了 现在我要做的是,当应用程序组件挂载时,我生成一个对后端服务器的ajax调用,当它返回时,它更新道具,并设置状态,这样子组件也会重新呈现,但子组件不会重新呈现。谁能告诉我出了什么问题。 问题2 现在让我们假设我将进入组件二路由,它将呈现组件二,我在应用程序组件中生成一个ajax调用,根据ajax调用返回的数据,我在应用程序组件中设置了一些道具,我还希望组

  • 我正在呈现一个自定义模态组件,该组件基于从父组件传入的道具来显示。道具最初为,然后通过按钮在父组件中更新。我正在通过render函数中的语句检查组件状态。当组件首次初始化时,它会像预期的那样记录,但当isVisible更新时,它会返回。为什么状态不随道具更新? 我知道这可能是非常基本的组件生命周期的东西,但我无法从文档中找到它,而且我是一个相当新的反应者。

  • 我是新来的,对一些事情有点困惑。我在网上读了许多文章,声称组件不能改变自己的道具,但是父组件可以改变其子组件的道具。然而,我没有看到任何真正展示如何做到这一点的东西。 我希望能够做到这一点: 然而,我根本不知道如何做到这一点——尽管我在React上读到的几乎所有材料都说父母可以改变孩子的道具。我能正常工作的如下: 当我只想重新渲染子视图时,父视图需要重新渲染,这对我来说似乎有点过分了。如何更改<代

  • 这个问题在这里已经得到了回答,但事情总是在变化。 基本上,父组件获取一些数据,子组件需要这些数据。 这是子组件。

  • 单击箭头时,购物车项视图需要展开该特定视图并折叠当前展开的其他视图。该产品的项id被传递给父组件,以更新要展开的视图(活动的)。虽然id是在reducer中的expandedItem属性上传递和设置的,但它不会更新到子组件(即使它是作为prop在子组件上传递的)。当在最后重新计算子组件时,expandedViewItem仍然为0,这是它的默认值。有人知道如何让子组件接收更新的expandedIte