将对象渲染为 React 组件

skr*_*rln 9 components rendering reactjs

在我的实现中,我传递了一个 reactelement(至少我是这么认为的)作为道具。

我想将这个道具渲染为它自己的 React 组件,但浏览器抱怨它是一个对象。

代码澄清:

在父级:

render() {
  return <SortableItem {...extraProps} item={React.cloneElement(item, extraProps)} />
}
Run Code Online (Sandbox Code Playgroud)

item道具包含了我想要呈现的元素SortableItem

在 SortableItem 渲染中:

我想做这样的事情:

render() {
  return <props.item />
}
Run Code Online (Sandbox Code Playgroud)

当我登录时,props.item我得到这个:

Object {$$typeof: Symbol(react.element), key: "item-5", ref: null, props: 
Object, type: function…}
$$typeof:Symbol(react.element)
key:"item-5"
props:Object
ref:null
type:function _class()
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么$$typeof会说这确实是一个反应元素,但是 type 说它是 afunction _class()并且当我登录/渲染时,浏览器说它是一个对象。

这是我在渲染时<props.item />在浏览器中得到的错误SortableItem

Fatal Exception:Uncaught Invariant Violation: Element type is invalid: 
expected a string (for built-in components) or a class/function (for 
composite components) but got: object. Check the render method of 
`SortableItem`.(reload cancelled)
Run Code Online (Sandbox Code Playgroud)

Vai*_*ngh 4

尝试这个,

方法一

在父级中:

render() {
  return <SortableItem {...extraProps} item={<YourComponent />} />
}
Run Code Online (Sandbox Code Playgroud)

在 SortableItem 渲染中:

render() {
  return {this.props.item}
}
Run Code Online (Sandbox Code Playgroud)

方法 2: 在父级中:

render() {
  return <SortableItem {...extraProps} >
     <YourComponent />
  </SortableItem>
}
Run Code Online (Sandbox Code Playgroud)

在 SortableItem 渲染中:

render() {
  return {this.props.children}
}
Run Code Online (Sandbox Code Playgroud)