網(wǎng)站首頁 編程語言 正文
解決React報(bào)錯(cuò)React.Children.only?expected?to?receive?single?React?element?child_React
作者:chuck ? 更新時(shí)間: 2023-02-14 編程語言總覽
當(dāng)我們把多個(gè)子元素傳遞給一個(gè)只期望有一個(gè)React子元素的組件時(shí),會(huì)產(chǎn)生"React.Children.only expected to receive single React element child"錯(cuò)誤。為了解決該錯(cuò)誤,將所有元素包裝在一個(gè)React片段或一個(gè)封閉div
中。
這里有個(gè)示例來展示錯(cuò)誤是如何發(fā)生的。
// App.js import React from 'react'; function Button(props) { // ??? expects single child element return React.Children.only(props.children); } export default function App() { return ( <Button> <button onClick={() => { console.log('Button clicked'); }} > Click </button> <button onClick={() => { console.log('Button clicked'); }} > Click </button> </Button> ); }
Button
元素期望傳遞單個(gè)子元素,但我們?cè)谕?jí)下傳遞了2個(gè)子元素。
React片段
我們可以使用React片段來解決該錯(cuò)誤。
import React from 'react'; function Button(props) { // ??? expects single child element return React.Children.only(props.children); } export default function App() { return ( <Button> <> <button onClick={() => { console.log('Button clicked'); }} > Click </button> <button onClick={() => { console.log('Button clicked'); }} > Click </button> </> </Button> ); }
當(dāng)我們需要對(duì)子節(jié)點(diǎn)列表進(jìn)行分組,而不需要向DOM添加額外的節(jié)點(diǎn)時(shí),就會(huì)使用Fragments
。
你可能還會(huì)看到使用了更詳細(xì)的片段語法。
import React from 'react'; function Button(props) { // ??? expects single child element return React.Children.only(props.children); } export default function App() { return ( <Button> <React.Fragment> <button onClick={() => { console.log('Button clicked'); }} > Click </button> <button onClick={() => { console.log('Button clicked'); }} > Click </button> </React.Fragment> </Button> ); }
上面的兩個(gè)例子達(dá)到了相同的結(jié)果--它們對(duì)子元素列表進(jìn)行分組,而沒有向DOM中添加額外的節(jié)點(diǎn)。
現(xiàn)在大多數(shù)代碼編輯器都支持更簡明的語法,因此更常用。
DOM元素
另一個(gè)解決方案是將子元素包裹在另一個(gè)DOM元素中,例如一個(gè)div
。
import React from 'react'; function Button(props) { // ??? expects single child element return React.Children.only(props.children); } export default function App() { return ( <Button> <div> <button onClick={() => { console.log('Button clicked'); }} > Click </button> <button onClick={() => { console.log('Button clicked'); }} > Click </button> </div> </Button> ); }
這樣就解決了錯(cuò)誤,因?yàn)槲覀儸F(xiàn)在向Button
組件傳遞了單一的子元素。
這種方法只有在添加一個(gè)額外的div
而不會(huì)破壞你的布局時(shí)才有效,否則就使用一個(gè)片段,因?yàn)槠尾粫?huì)向DOM添加任何額外的標(biāo)記。
這是很有必要的,因?yàn)?code>Button組件使用React.Children.only
函數(shù)來驗(yàn)證children
屬性是否只有一個(gè)子元素,并返回它。否則該方法會(huì)拋出一個(gè)錯(cuò)誤。
React.Children.only
方法經(jīng)常被用于第三方庫,以確保API的消費(fèi)者在使用該組件時(shí)只提供一個(gè)子元素。
原文鏈接:https://juejin.cn/post/7179606722162950199
相關(guān)推薦
- 2022-07-21 數(shù)據(jù)庫慢查詢介紹并優(yōu)化
- 2023-07-22 垃圾回收的核心知識(shí)點(diǎn)解析
- 2023-04-06 C++內(nèi)存對(duì)齊的實(shí)現(xiàn)_C 語言
- 2022-11-08 PostgreSQL?pg_filenode.map文件介紹_PostgreSQL
- 2022-07-09 python處理excel文件之xlsxwriter?模塊_python
- 2022-08-21 python深度學(xué)習(xí)tensorflow安裝調(diào)試教程_python
- 2022-03-14 Prefix must be in canonical form
- 2022-02-07 SSH連服務(wù)器提示“Permission denied(publickey,gssapi-keyex
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支