【问题标题】:Show or Hide on div among multiple divs React在多个 div 中的 div 上显示或隐藏 React
【发布时间】:2022-01-25 04:51:51
【问题描述】:

我试图根据下拉点击呈现一个组件。

这是我的代码

const App = () => {
    const [showPlayer, setShowPlayer] = useState();

    const switchVisibleDiv = ({divNumber}) => {
        setShowPlayer({showPlayer: divNumber})
    }

    return(
        <>
            <DropdownButton id="dropdown-basic-button" title="Dropdown Menu">
                {data.map((info, index) => (
                    <Dropdown.Item key={index} onClick={() => switchVisibleDiv(index)}>Title - {data.title}</Dropdown.Item>
                ))}
            </DropdownButton>

            {data.map((video, index) => (
            (showPlayer === index ?
                <Plyr
                key={index}
                options={options}
                source={{
                    type: 'video',
                    title: 'Example title',
                    sources: [
                        {
                        `${video.video_url}`,
                        type: 'video/mp4',
                        size: 1080,
                        }
                    ]
                    }}
                />
                : null)
            ))}
        </>
    )
}

但它似乎不起作用,我从这里的答案中获取了参考,这是一个类组件,并尝试将其转换为函数组件。

Link to answer

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    你需要设置一个数字而不是一个对象:

        const switchVisibleDiv = (divNumber) => {
            setShowPlayer(divNumber})
        }
    

    您可以做的另一件事是删除该函数并从这里简单地设置状态:

    <DropdownButton id="dropdown-basic-button" title="Dropdown Menu">
                    {data.map((info, index) => (
                        <Dropdown.Item key={index} onClick={() => setShowPlayer(index)}>Title - {data.title}</Dropdown.Item>
                    ))}
                </DropdownButton>
    
    

    PS:使用其他东西代替index 作为key。不推荐。

    【讨论】:

    • 我试过你的答案,但第一个下拉菜单在点击时按预期工作,但是当我点击第二个下拉菜单时,它会抛出这个错误'Uncaught DOMException: Failed to execute 'removeChild''
    【解决方案2】:

    您应该为DropdownButton 组件更改此callback 函数。

    const switchVisibleDiv = (divNumber) => {
        setShowPlayer(divNumber)
    }
    

    这样就可以了,原来的方法是Class Component格式,在Functional Component中,我们不这样使用,只需将divNumber作为setShowPlayer setter函数的参数传递即可。

    然后就可以了。

    【讨论】:

    • 嘿@Alan Zhou 我尝试了你的答案,但它不起作用 Tushar 的答案有效,但是当我单击第二个下拉项以显示第二个 plyr 组件时,它会抛出“未捕获的 DOMException:无法执行'removeChild'' 错误
    • @DesterKen,抱歉,更新了代码,因此您应该从回调中的参数中删除花括号。
    • 我尝试更改代码它仍然抛出相同的错误
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多