通过其同级触发状态更改时,子组件不会重新呈现

爱好99

有两个子组件(L1和L2)。两者都渲染文本和一个按钮。当按下L1中的按钮时,它将更改L1的文本(在下面的代码中可以正常工作)。当按下L2中的按钮时,它将更改L2的文本(在下面的代码中也可以正常工作)。

L1组件还具有第二个按钮,尽管它也可以更改位于另一个组件L2内部的文本。这是我的代码不再起作用的地方。仍然会调用使用的相同函数,并且会更改状态值,但是L2组件将永远不会重新渲染/其文本保持不变。

家长:

export const Parent = ({ hours, day, location, context }) => {

const numItemsToShow:number = 12;
const [showMore, setShowMore] = useState<any>({
    showMoreX: false,
    showMoreY: false,
    showMoreAmountX: 50 * numItemsToShow,
    showMoreAmountY: 50 * numItemsToShow,
    showMoreAmountTotalX: 0 //x cannot be set to auto => need to know total width
});


const doShowMoreX = (e) => {
    console.log('1')
    setShowMore((prevState) => {
        return {...prevState, showMoreX: !showMore.showMoreX};
    });
}

const doShowMoreY = (e) => {
    console.log('2')
    setShowMore((prevState) => { //PROBLEM: When called by L1, the Text in L2 never changes even though state changes - when called by L2 its all fine/text changes
        return {...prevState, showMoreY: !showMore.showMoreY};
    });
}


return (
    <>
    <ErrorBoundary>
        {
            (context === 'detailed') ?
            <L2 day={day} hours={hours} location={location} state={showMore} doShowMoreY={doShowMoreY}></L2> :
            <L1 day={day} hours={hours} location={location} state={showMore} doShowMoreX={doShowMoreX} doShowMoreY={doShowMoreY}></L1>
        }
    </ErrorBoundary>
</>
)
}

L1(儿童1)

export const L1 = ({ day, hours, location, state, doShowMoreX, doShowMoreY }) => {
const {showMoreX, showMoreAmountX, showMoreAmountTotalX} = state;

return (
    <div>
        {
            <div>
                <div>{(showMoreX) ? 'Some Output L1' : '-'}</div>
                <button onClick={doShowMoreX}>Change Output L1</button><br/>
                <button onClick={doShowMoreY}>Change Output L2</button> <!-- PROBLEM: L2 Text never changes even though doShowMoreY-function is called and state value is changed -->
            </div>
        }

    </div>
)
}

L2(儿童2)

export const L2 = ({ day, hours, location, state, doShowMoreY }) => {
const { showMoreY, showMoreAmountY } = state;
return (
    <div>
        {
            <div>
                <div>{(showMoreY) ? 'Some Output L2' : '-'}</div>
                <button onClick={doShowMoreY}>Change Output L2</button>
            </div>
        }

    </div>
)
}
爱好99

我的子组件无法通过公共父组件更新其兄弟组件的原因是公共父组件的渲染方法中的条件语句。

return (
    <>
        <ErrorBoundary>
            {
            (context === 'detailed') ? //context value was the same and thus child never rerendered
            <L2 day={day} hours={hours} location={location} state={showMore} doShowMoreY={doShowMoreY}></L2> :
            <L1 day={day} hours={hours} location={location} state={showMore} doShowMoreX={doShowMoreX} doShowMoreY={doShowMoreY}></L1>
            }
        </ErrorBoundary>
    </>
)

我仍然需要该条件语句,因此最终我使用redux在子内部直接检查了更新的值(同样可以在react context API中使用)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同级组件不会在状态更改时重新呈现(使用useEffect,useState和Context)

来自分类Dev

子组件无法触发状态更改

来自分类Dev

React组件不会在状态更改时重新呈现

来自分类Dev

组件不会在状态更改时重新呈现

来自分类Dev

子组件在每个状态更改时都重新呈现

来自分类Dev

功能组件在状态更改时重新呈现

来自分类Dev

通过单击来更改状态更改时,React Native ListView不会重新呈现

来自分类Dev

React-redux组件不会在商店状态更改时重新呈现

来自分类Dev

React + Redux:组件不会在状态更改时重新呈现

来自分类Dev

react native:如何在状态更改时停止子组件的重新呈现?

来自分类Dev

reactjs表示组件在redux状态更改时未重新呈现

来自分类Dev

反应不会在状态更改时重新呈现

来自分类Dev

React不会在状态更改时重新呈现

来自分类Dev

React:子组件未在父状态更改时呈现

来自分类Dev

当 prop 更改时,无状态组件不会重新渲染

来自分类Dev

带窗口的Kafka Streams拓扑不会触发状态更改

来自分类Dev

父状态更改时子组件不会更新

来自分类Dev

数组属性更改时,React子组件不会重新渲染

来自分类Dev

状态更改后功能组件不会重新呈现[React]

来自分类Dev

状态更改时,react组件中的输入元素的值未重新呈现

来自分类Dev

当状态/属性更改时,Antd 3.26表单验证消息不会重新呈现新值

来自分类Dev

Vue 列表项不会在状态更改时重新呈现

来自分类Dev

反应组件不会在父组件 firebase 的状态更改时重新渲染

来自分类Dev

Reactjs:为什么子组件不会在数据更改时重新呈现?

来自分类Dev

Reactjs:为什么子组件不会在数据更改时重新呈现?

来自分类Dev

状态更改时,React不会重新渲染

来自分类Dev

当RN 0.61中的状态更改时,如何从主组件中重新渲染子组件?

来自分类Dev

为什么vue v-for在数据更改时不重新呈现子组件?

来自分类Dev

更新URL而不触发状态更改

Related 相关文章

  1. 1

    同级组件不会在状态更改时重新呈现(使用useEffect,useState和Context)

  2. 2

    子组件无法触发状态更改

  3. 3

    React组件不会在状态更改时重新呈现

  4. 4

    组件不会在状态更改时重新呈现

  5. 5

    子组件在每个状态更改时都重新呈现

  6. 6

    功能组件在状态更改时重新呈现

  7. 7

    通过单击来更改状态更改时,React Native ListView不会重新呈现

  8. 8

    React-redux组件不会在商店状态更改时重新呈现

  9. 9

    React + Redux:组件不会在状态更改时重新呈现

  10. 10

    react native:如何在状态更改时停止子组件的重新呈现?

  11. 11

    reactjs表示组件在redux状态更改时未重新呈现

  12. 12

    反应不会在状态更改时重新呈现

  13. 13

    React不会在状态更改时重新呈现

  14. 14

    React:子组件未在父状态更改时呈现

  15. 15

    当 prop 更改时,无状态组件不会重新渲染

  16. 16

    带窗口的Kafka Streams拓扑不会触发状态更改

  17. 17

    父状态更改时子组件不会更新

  18. 18

    数组属性更改时,React子组件不会重新渲染

  19. 19

    状态更改后功能组件不会重新呈现[React]

  20. 20

    状态更改时,react组件中的输入元素的值未重新呈现

  21. 21

    当状态/属性更改时,Antd 3.26表单验证消息不会重新呈现新值

  22. 22

    Vue 列表项不会在状态更改时重新呈现

  23. 23

    反应组件不会在父组件 firebase 的状态更改时重新渲染

  24. 24

    Reactjs:为什么子组件不会在数据更改时重新呈现?

  25. 25

    Reactjs:为什么子组件不会在数据更改时重新呈现?

  26. 26

    状态更改时,React不会重新渲染

  27. 27

    当RN 0.61中的状态更改时,如何从主组件中重新渲染子组件?

  28. 28

    为什么vue v-for在数据更改时不重新呈现子组件?

  29. 29

    更新URL而不触发状态更改

热门标签

归档