2017-07-26 150 views
1

基本上,我试图克隆一个元素并在React.cloneElement中更改其咏叹调标签。我有一个组件 - ButtonArrows - 它创建了两个Button组件,一个箭头图标指向左边,一个指向右边。我希望能够以编程方式更改咏叹调标签,但连字符会引发错误。在React.cloneElement()中设置aria-label/aria-labelledby?

下面是一些代码显示我想要做的事:

const ButtonArrows = ({leftArrow, rightArrow, ...props}) 
    const prevButton = (
    <Button 
     aria-label="Previous", 
     icon={leftArrow} 
    /> 
); 

    const nextButton = React.cloneElement(prevButton, { 
    //this is where the problem is: 
    aria-label="Next", 
    icon={rightArrow} 
    }); 

    return(<div {...props}>{prevButton}{nextButton}</div>); 
} 

,显然我不能这样做,因为aria-label="Next"的连字符。

有什么建议吗? React不幸的是没有任何东西像htmlFor(代表html-for),当它咏叹调标签。我应该在Button上放置一个ariaLabel道具并传递它,还是有办法直接使用我缺少的cloneElement?

回答

2

您应该能够使用普通的JavaScript对象的位置:

const nextButton = React.cloneElement(prevButton, { 
    'aria-label': 'Next', 
    icon: rightArrow 
}); 
+0

完美!我深深地思考了React如何使用htmlFor和className,我完全推崇它。 –

+0

@kbuechner很高兴我能帮忙!如果我的答案解决了您的问题,请点击大复选框将其作为答案接受。 –