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}) => {