Reactjs 子组件未使用新道具刷新
我有以下代码的父组件:Reactjs 子组件未使用新道具刷新,reactjs,Reactjs,我有以下代码的父组件: <div> {widgetList.map((widget,index,array) => { const zIndex = array.length - index; return( <div key={widget._id} style={{zIndex}}> <RenderWidget
<div>
{widgetList.map((widget,index,array) => {
const zIndex = array.length - index;
return(
<div key={widget._id} style={{zIndex}}>
<RenderWidget
widget={widget}
index={index}
array={array}
dataWidgetRead={dataWidgetRead}
widgetValues={widgetValues}
rofileType={props.profileType}
handleOpenProfileWidget={handleOpenProfileWidget}
isResizable={isResizable}
setWidgetValues={setDataFromWidget}/>
</div>
)
} )}
</div>
以及我从套接字接收的函数:
const getAttributesByWebSocket = message => {
if(message[0] === '{'){
try {
const messageDecoded = JSON.parse(message);
const toUpdate = getWidgetToUpdate(messageDecoded);
const newValues = refreshWidgetData(toUpdate, messageDecoded, widgetValues);
setWidgetValues(newValues);
} catch (e) {
return console.log('Bad Response: ', e);
}
}
return true;
}
如果我使用字符串更改此函数中的
newValues
,例如,provocate new render,但使用具有新值的对象,no..您将使用RenderWidget
作为组件,而不是函数:
<div>
{widgetList.map((widget,index,array) => <RenderWidget widget={widget} index={index} array={array} dataWidgetRead={dataWidgetRead} widgetValues={widgetValues} profileType={props.profileType}, handleOpenProfileWidget={handleOpenProfileWidget} isResizable={isResizable} setDataFromWidget={setDataFromWidget} />)}
</div>
const RenderWidget = ({widget, index, array, dataWidgetRead, widgetValues, profileType, handleOpenProfileWidget, isResizable, setDataFromWidget}) => {
{widgetList.map((小部件、索引、数组)=>)}
const RenderWidget=({widget,index,array,dataWidgetRead,widgetValues,profileType,handleOpenProfileWidget,isResizable,setDataFromWidget})=>{
为了简化操作,您还可以将道具收集到一个
props
对象中。您显示的代码不足以回答问题。请向我们展示RenderWidget
组件以及如何更新widgetList
。完成!在每种情况下,我都称为“SetWidgetValues”。此函数在父组件上设置新状态,但不显示通过套接字接收新数据时如何实际更新widgetList
,该套接字将触发重新渲染。此外,在渲染过程中不应触发状态更新,除了极少数使用情况。这里的方法是构造一个新的widgetList
和直接在父级中更新状态。我只是这样做。我将用新代码编辑帖子。它不会更新:/如果对象值更改,可能会引发新的渲染还是不?我正在测试,更改从套接字接收的值,它会引发渲染,但使用新值,不……发生了什么?!
<div>
{widgetList.map((widget,index,array) => <RenderWidget widget={widget} index={index} array={array} dataWidgetRead={dataWidgetRead} widgetValues={widgetValues} profileType={props.profileType}, handleOpenProfileWidget={handleOpenProfileWidget} isResizable={isResizable} setDataFromWidget={setDataFromWidget} />)}
</div>
const RenderWidget = ({widget, index, array, dataWidgetRead, widgetValues, profileType, handleOpenProfileWidget, isResizable, setDataFromWidget}) => {