Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS-如何在映射函数中设置状态_Javascript_Reactjs - Fatal编程技术网

Javascript ReactJS-如何在映射函数中设置状态

Javascript ReactJS-如何在映射函数中设置状态,javascript,reactjs,Javascript,Reactjs,我得到了一个包含另一个对象的对象,我需要像这样渲染DOM: 事件 门票1 标段1 名字 标段2 名字 标段3 名字 票2 标段1 名字 标段2 名字 {this.state.dates.map((date,i)=> {date.date} this.setState({tickets:date.tickets})//在这里,我需要更新一个对象以映射到另一个地方 )} ./src/pages/Event/Event.js 语法错误:D:/YEAPPS/mark

我得到了一个包含另一个对象的对象,我需要像这样渲染DOM:

  • 事件
    • 门票1
      • 标段1
        • 名字
      • 标段2
        • 名字
      • 标段3
        • 名字
    • 票2
      • 标段1
        • 名字
      • 标段2
        • 名字
{this.state.dates.map((date,i)=>
{date.date}
this.setState({tickets:date.tickets})//在这里,我需要更新一个对象以映射到另一个地方
)}
./src/pages/Event/Event.js 语法错误:D:/YEAPPS/marketplace/pwa/src/pages/Event/Event.js:意外标记,应为,(54:32)


不要从渲染函数中调用setState,这将导致不必要的重新渲染,即不要在此处使用票证更新状态


使用其他生命周期挂钩(例如,
componentDidMount
)在组件内设置您的状态,然后简单地映射到您的
this.state.tickets.map()
,或者像您已经在做的那样,映射到
this.state.dates.map()

,我可以这样解决:

{
this.state.tickets.map((ticket,i)=>(
{ticket.name}
{ticket.lot.map((lot,j)=>
{lot.name}
R${lot.price.replace('.',',')}
(R${lot.price.replace('.',',')}+R${lot.price_tax.replace('.',',')}) )}
) )
}
设置状态的目的是什么?你在每次迭代中都会覆盖“票证”,请提供更多的上下文以获得最佳答案我对此不确定,但计算一次新状态,然后使用setState传递新对象,而不是重新计算每个项目是否会更容易。他告诉了你该怎么做,您绝对不应该在循环中设置状态或在渲染中设置状态。如果您需要此阵列中的数据,您应该在从服务器接收数据时执行此操作,而服务器可能根本不在react视图中。您可以提供一个示例对象,说明日期和票证的关系吗?在你最近的编辑中,我看不出日期是如何相关的
{ this.state.dates.map((date, i) =>
    <span className="event-date" key={i}>
     { date.date }
    </span>
    this.setState({tickets: date.tickets}) //Here, I need to update an object to map in another place
)}