渲染组件及其状态

用户9686855

我现在对生命周期钩子真的很困惑。这是我的代码:

应用程序.js:

class App extends Component {
  constructor(props){
    super(props);
    this.state = {
      arrayOfComponents: []
    }
  }
  componentDidMount(){
  //i get the properties from the server which responds with the database's elements
    fetch('http://localhost:3001/')
    .then(res => res.json())
    .then(arrayOfData => this.setState({arrayOfComponents: arrayOfData}))
    .catch(err => console.log(err))
  }

  render() {
    console.log(this.state) //first returns empty array, after the mount returns the db's array of elements
    return (
      <div className="App">
        <Component name='First' id={1} componentsComponents={this.state.arrayOfComponents} />
      </div>
    );
  }
}

组件.js:

class Component extends React.Component{
    constructor(props){
        super(props);
        this.state={
            componentsComponents: []
        }
    }
    //here i was tried with componentDidMount, componentWillMount to set the
    //this.props.componentsComponents to this.state.componentsComponents
    //but it didn't work
    renderComponents = () => {
        if(this.state.componentsComponents.length){
            return this.state.componentsComponents.filter(c => c.inhertedFromId === this.props.id).map(c => {
                return <Component name={c.name} id={c.id} componentsComponents={this.props.componentsComponents} />
            })
        }
    }
    render(){
        return(
            <div>
                {this.renderComponents()}
            </div>
        )
    }
}

所以我想要做的是让组件自己呈现,这取决于它们从App.js. 但是如何在渲染发生之前设置状态?如果它确实挂载了,我可以以某种方式要求组件再次渲染吗?或者有其他解决方案吗?

史蒂夫班顿

将过滤器带到应用程序

在这里,您似乎没有调用 renderComponents,而且您还试图在其内部渲染一个 Component,这很难推理。将 renderComponents 函数带到 App 中,并在 App 内部使用 Component 渲染数据,并将 props 向下传递给无状态的 Component,这可能是表示数据的更简单的解决方案。

如果递归调用确实是表示此数据的最佳方式,则可能需要使用 getDerivedStateFromProps 将 props 移动到更新状态,如果您希望将该数据存储在状态中 - 类似于:

static getDerivedStateFromProps(nextProps) {
  return {
    componentsComponents: nextProps.componentsComponents
  }
}

添加到组件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

状态更改后从子组件重新渲染

来自分类Dev

更改存储状态后重新渲染组件

来自分类Dev

反应如何通过状态而不渲染组件

来自分类Dev

从 Redux 状态属性渲染 React 组件

来自分类Dev

基于状态变化的组件条件渲染

来自分类Dev

React 重新渲染重置组件的悬停状态

来自分类Dev

重新渲染时如何更新组件状态

来自分类Dev

当状态是对象的对象时组件重新渲染

来自分类Dev

状态更改不重新渲染组件

来自分类Dev

反应:更改功能组件中的状态也更改功能组件的props值及其父类状态

来自分类Dev

更新目标组件中的全局状态,而无需重新渲染共享全局状态的组件

来自分类Dev

ReactJs:如何在渲染组件时传递初始状态?

来自分类Dev

反应渲染状态子组件变量未更新?

来自分类Dev

在redux状态的语言环境更新后重新渲染React组件

来自分类Dev

在React中重新渲染子组件或更改子状态

来自分类Dev

React组件渲染两次调用而未更改状态

来自分类Dev

当父状态在React中更改时停止渲染子组件

来自分类Dev

基于Redux状态(cookie接受)的条件渲染Youtube组件

来自分类Dev

使用功能组件渲染后反应访问状态

来自分类Dev

为什么在状态更新时不响应组件重新渲染?

来自分类Dev

重新渲染时,react组件会重置其状态吗?

来自分类Dev

状态更改后,Redux反应不重新渲染组件

来自分类Dev

React组件正在重新渲染从状态中移除的项目

来自分类Dev

在redux状态的语言环境更新后重新渲染React组件

来自分类Dev

如何在状态下渲染组件以做出反应?

来自分类Dev

reactjs-更改状态不会重新渲染组件

来自分类Dev

当 prop 更改时,无状态组件不会重新渲染

来自分类Dev

在数组中,在 React 组件的状态中渲染对象的属性

来自分类Dev

组件不会在状态更新时重新渲染

Related 相关文章

  1. 1

    状态更改后从子组件重新渲染

  2. 2

    更改存储状态后重新渲染组件

  3. 3

    反应如何通过状态而不渲染组件

  4. 4

    从 Redux 状态属性渲染 React 组件

  5. 5

    基于状态变化的组件条件渲染

  6. 6

    React 重新渲染重置组件的悬停状态

  7. 7

    重新渲染时如何更新组件状态

  8. 8

    当状态是对象的对象时组件重新渲染

  9. 9

    状态更改不重新渲染组件

  10. 10

    反应:更改功能组件中的状态也更改功能组件的props值及其父类状态

  11. 11

    更新目标组件中的全局状态,而无需重新渲染共享全局状态的组件

  12. 12

    ReactJs:如何在渲染组件时传递初始状态?

  13. 13

    反应渲染状态子组件变量未更新?

  14. 14

    在redux状态的语言环境更新后重新渲染React组件

  15. 15

    在React中重新渲染子组件或更改子状态

  16. 16

    React组件渲染两次调用而未更改状态

  17. 17

    当父状态在React中更改时停止渲染子组件

  18. 18

    基于Redux状态(cookie接受)的条件渲染Youtube组件

  19. 19

    使用功能组件渲染后反应访问状态

  20. 20

    为什么在状态更新时不响应组件重新渲染?

  21. 21

    重新渲染时,react组件会重置其状态吗?

  22. 22

    状态更改后,Redux反应不重新渲染组件

  23. 23

    React组件正在重新渲染从状态中移除的项目

  24. 24

    在redux状态的语言环境更新后重新渲染React组件

  25. 25

    如何在状态下渲染组件以做出反应?

  26. 26

    reactjs-更改状态不会重新渲染组件

  27. 27

    当 prop 更改时,无状态组件不会重新渲染

  28. 28

    在数组中,在 React 组件的状态中渲染对象的属性

  29. 29

    组件不会在状态更新时重新渲染

热门标签

归档