React Bootstrap Tab标题无法渲染图标,显示[Object][Object]求助
解决React Bootstrap Tabs组件title属性传入图标显示[Object][Object]的问题
嘿,我之前也碰到过这个问题!你现在看到的[Object][Object],根源是用模板字符串把JSX元素转换成了字符串——模板字符串会把JSX对象直接转成默认的字符串表示,也就是[object Object]。
其实React Bootstrap的Tab组件的title属性根本不需要用字符串拼接,它直接支持传入JSX元素!直接把你的文本和图标组合成JSX传给title就行,具体修改如下:
const tabsInstance = ( <Tabs defaultActiveKey={1}> {/* 直接传入JSX作为title值,用React片段包裹多个元素 */} <Tab eventKey={1} title={<>Tab1 <i className="icon-remove"></i></>} > Tab 1 content </Tab> <Tab eventKey={2} title="Tab 2">Tab 2 content</Tab> <Tab eventKey={3} title="Tab 3" disabled>Tab 3 content</Tab> </Tabs> );
这里有两个细节要注意:
- 用React的片段
<></>来包裹文本和图标(当然用<span>或者<div>也可以,片段更轻量化,不会额外生成DOM节点) - React里要把HTML的
class改成className,避免出现属性警告
如果你的标题需要动态生成(比如根据变量改变文本),也可以直接写JSX表达式:
const tabNumber = 1; const dynamicTabTitle = ( <div> Tab{tabNumber} <i className="icon-remove"></i> </div> ); const tabsInstance = ( <Tabs defaultActiveKey={tabNumber}> <Tab eventKey={tabNumber} title={dynamicTabTitle}> Tab {tabNumber} content </Tab> {/* 其他Tab... */} </Tabs> );
核心逻辑就是:title属性接受React节点(JSX)作为值,不要用模板字符串把JSX转成字符串,这样就能正常渲染图标和文本了。
内容的提问来源于stack exchange,提问作者Johnson Samuel
相关产品推荐
相关产品推荐

