从 JSX 函数返回一个数组并在别处解构它
Returning an array from a JSX function and destructuring it elsewhere
目前正在对 JSX 进行一些试验并遇到了这个想法:
我能做到:
import React from 'react'
const Test = () => {
return <div>Test</div>
}
export default Test
然后将此文件导入其他地方并执行:
<Test />
如果我从我的 JSX 文件中 return 数组为什么不一样?
import React from 'react'
const Test = () => {
let arr = [
<div>Test 1</div>,
<div>Test 2</div>,
]
return arr;
}
export default Test
然后:
let [firstElement, secondElement] = Test();
return (
<div>
<firstElement />
</div>
)
在这两种情况下,我要渲染的都是非常普通的 <div>
。在第一种情况下,它是直接 returned,在第二种情况下,它是从数组中解构的。但是,第二种情况对我不起作用?应该吗?
PS:我知道我可以做到 {firstElement}
- 但为什么不能 <firstElement />
?
以下应该有效:
let arr = [
() => <div>Test 1</div>,
() => <div>Test 2</div>,
]
您目前正在做的是调用 React.createElement
两次。
首先在数组 (<div>Test 1</div
) 中调用它,然后 return 从函数中创建的元素,然后通过调用 <firstElement/>
再次渲染它。
旁注,firstElement
应该是大写的,否则(我认为)JSX 转换器会将其视为原生 DOM 元素,而不是您的自定义组件,稍后将导致抛出)。
因此,要么将数组中的内容更改为组件,如上所述 (() => <div>Test 1</div>
),要么将 <firstElement />
更改为 {firstElement}
无论哪种方式,您正在做的事情都非常骇人听闻,应该只是出于好奇。 Test
应编码为:
const Test = () => {
const arr = [
<div>Test 1</div>,
<div>Test 2</div>,
];
return <>{arr}</>;
}
这两个div已经是react元素,是react创建的对象,不是组件。要渲染它们,请使用表达式(大括号):
const test = () => [
<div>Test 1</div>,
<div>Test 2</div>,
]
const [firstElement, secondElement] = test();
const Demo = () => (
<div>
{firstElement}
</div>
)
ReactDOM.render(
<Demo />,
root
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
目前正在对 JSX 进行一些试验并遇到了这个想法:
我能做到:
import React from 'react'
const Test = () => {
return <div>Test</div>
}
export default Test
然后将此文件导入其他地方并执行:
<Test />
如果我从我的 JSX 文件中 return 数组为什么不一样?
import React from 'react'
const Test = () => {
let arr = [
<div>Test 1</div>,
<div>Test 2</div>,
]
return arr;
}
export default Test
然后:
let [firstElement, secondElement] = Test();
return (
<div>
<firstElement />
</div>
)
在这两种情况下,我要渲染的都是非常普通的 <div>
。在第一种情况下,它是直接 returned,在第二种情况下,它是从数组中解构的。但是,第二种情况对我不起作用?应该吗?
PS:我知道我可以做到 {firstElement}
- 但为什么不能 <firstElement />
?
以下应该有效:
let arr = [
() => <div>Test 1</div>,
() => <div>Test 2</div>,
]
您目前正在做的是调用 React.createElement
两次。
首先在数组 (<div>Test 1</div
) 中调用它,然后 return 从函数中创建的元素,然后通过调用 <firstElement/>
再次渲染它。
旁注,firstElement
应该是大写的,否则(我认为)JSX 转换器会将其视为原生 DOM 元素,而不是您的自定义组件,稍后将导致抛出)。
因此,要么将数组中的内容更改为组件,如上所述 (() => <div>Test 1</div>
),要么将 <firstElement />
更改为 {firstElement}
无论哪种方式,您正在做的事情都非常骇人听闻,应该只是出于好奇。 Test
应编码为:
const Test = () => {
const arr = [
<div>Test 1</div>,
<div>Test 2</div>,
];
return <>{arr}</>;
}
这两个div已经是react元素,是react创建的对象,不是组件。要渲染它们,请使用表达式(大括号):
const test = () => [
<div>Test 1</div>,
<div>Test 2</div>,
]
const [firstElement, secondElement] = test();
const Demo = () => (
<div>
{firstElement}
</div>
)
ReactDOM.render(
<Demo />,
root
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>