使用“内容”属性时组件不重新渲染(react-insta-stories)

Posted

技术标签:

【中文标题】使用“内容”属性时组件不重新渲染(react-insta-stories)【英文标题】:Component not re-rendering when using 'content' property (react-insta-stories) 【发布时间】:2020-04-23 16:38:39 【问题描述】:

我正在尝试使用react-insta-stories 创建故事。我正在使用content 属性来显示故事。我正在尝试更改 handleclick() 中变量的值。这里有 2 个链接:link 1link 2。我试图通过更改showViewers 的值来显示/隐藏在点击功能上查看故事的用户列表。我可以看到组件不断地重新渲染,直到故事的进展结束。问题是当我在故事的进展结束后更改showViewers 变量的值时,组件没有重新渲染。


 content: ( action, isPaused ) => 
     const handleClick = (e) => 
         showViewers = !showViewers;
         console.log(showViewers);
     ;
     return (
        <div onClick=handleClick className='story-wrap'>    
        <img src=require('./img.png') alt='' className='story-img'/>
        console.log(showViewers)      //logging value of variable
        showViewers ? (
            <div className='viewed-by-list-wrap'>
                viewedBy.map((user, index) => (
                    <div className='viewed-by-list-item' key=index>
                     <img src=user.avatar alt='' />
                        <div className='user-name'>
                             <p>user.name</p>
                            <p>user.time</p>
                        </div>
                    </div>
                ))
            </div>
        ) : null 
        <div className='see-more' onClick=() => handleClick>Viewed</div>
        </div>
     );
    ,
    header: 
             heading: '_sudo_',
             subheading: 'Posted 32m ago',
             profileImage: require('./img.png') 

一旦进度结束并且组件停止渲染,就会调用函数并更改变量的值,但上述组件不会渲染。

我尝试将showViwers 保持在组件的状态中。但是每次状态更新时,故事进度都会从头开始更新。

还有其他逻辑可以做这个功能吗?

【问题讨论】:

请贴出该组件的完整代码 showViewers 状态吗?只有当你改变 state 的值时,组件才会重新渲染。喜欢this.setState(showViewers : !this.state.showViewers) 我已经用更多代码编辑了这个问题。请看一下。 @Kais 我试过了。但同样的问题仍然存在。此外,由于组件重新渲染,故事进度也会更新。 IE。当我声明更新时,故事从一开始就显示出来了。 【参考方案1】:
<div onClick=handleClick className='story-wrap'>    
        <img src=require('./img.png') alt='' className='story-img'/>
        console.log(showViewers)      //logging value of variable
        showViewers ? (
            <div className='viewed-by-list-wrap'>
                viewedBy.map((user, index) => (
                    <div className='viewed-by-list-item' key=index>
                     <img src=user.avatar alt='' />
                        <div className='user-name'>
                             <p>user.name</p>
                            <p>user.time</p>
                        </div>
                    </div>
                ))
            </div>
        ) : null 
        <div className='see-more' onClick=() => handleClick>Viewed</div>
        </div>

您的 onClick 处理程序不起作用将 z-index 的高值放在外部 div 中,即在您的案例故事包装中。

.story-wrap
  z-index: 100000;

【讨论】:

以上是关于使用“内容”属性时组件不重新渲染(react-insta-stories)的主要内容,如果未能解决你的问题,请参考以下文章

在重新渲染时反应不更新属性

属性更改时如何重新渲染反应组件

Vue 计算属性已更新,但组件未重新渲染

React 学习笔记

计算属性不重新渲染

每当我输入内容时组件都会重新渲染,但我只想在按钮的 onClick 之后重新渲染