Javascript ReactJS-如何在映射函数中设置状态
我得到了一个包含另一个对象的对象,我需要像这样渲染DOM: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
- 事件
- 门票1
- 标段1
- 名字
- 标段2
- 名字
- 标段3
- 名字
- 标段1
- 票2
- 标段1
- 名字
- 标段2
- 名字
- 标段1
- 门票1
{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
)}