javascript - (React) 动态组件条件设置状态

标签 javascript reactjs react-router

我正在尝试创建一个动态组件,该组件将数据索引与我通过路由器获得的 URL 参数 blogID 相匹配。

这里我有路由器参数并将 Prop 发送到组件

<Route path='/blog/:blogId/:blogTitle' render={() => <BlogPost blogData={this.state.blogData} /> }  />     

然后在组件上设置初始状态并尝试呈现与数据索引匹配的数据,但我收到组件重复调用 setstate 和无限循环的错误。

constructor(props){
        super(props);
        this.state = {
            blogId:'',
            blogTitle:'',
            blogData:[]
        }            
    }   

   render(){                  
        const { params:{ blogId, blogTitle } } = this.props.match;  

// so i map here to get the index and set the conditional to set the new state but I don't know where or how exactly        

        this.props.blogData.map((val, idx) => ( 
            idx == blogId ? 
                this.setState({blogData:val }) : null                               
        ))
        return (                          
          <div>              


           <BlogView title={this.state.blogData.title} />


          </div>
        )  
    } 

最佳答案

你得到一个无限循环的原因是在你的渲染方法中调用 setState,这会导致重新渲染,这会导致 setState,这会导致重新渲染......等等。

尝试将这部分移出渲染方法。

this.props.blogData.map((val, idx) => ( idx == 博客编号? this.setState({blogData:val }) : null ))

关于javascript - (React) 动态组件条件设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58075403/

相关文章:

javascript - 正确使用Physics.aabb.union()

reactjs - 如何在 RTK 查询中自动重新获取数据

cordova - react 路由器和 Cordova 不工作

javascript - 如何在 ReactJS 中使用适当的、可测试的事件处理程序制作可重用的组件

javascript - 如何在鼠标悬停时为页面上的所有 div 添加悬停效果?

javascript - 在 JSX React 中循环 <li> 元素

javascript - 条件路由在 Switch 内部立即执行

javascript - 返回的 React-Router <Route> 在 switch 中不起作用

javascript - 在 iframe 元素中的 srcdoc 属性中使用链接时,链接相对于什么?

css - 在 React 中,如何防止组件的 CSS 导入应用于整个应用程序?