首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用react访问参考文献-可排序-自组织,随引用

如何使用react访问参考文献-可排序-自组织,随引用
EN

Stack Overflow用户
提问于 2020-01-14 01:35:00
回答 1查看 1.4K关注 0票数 0

我尝试在react-sortable-hoc中使用"withref“,并且我需要让我的父组件访问我需要在父端调用的一些调用的子组件。我甚至不知道该在哪里调用getWrappedInstance,它似乎提供了对子组件的访问。

我知道转发,但似乎react-sortable-hoc有一个不同的实现。

更确切地说,我有这样的事情:

代码语言:javascript
复制
const SortableItem = SortableElement((props) => (
  <div className="sortable">
    <MyElement {...props}/>
  </div>
), {withRef: true});
代码语言:javascript
复制
const MidasSortableContainer = SortableContainer(({ children }: { children: any }) => {
  return <div>{children}</div>;
}, {withRef: true});
代码语言:javascript
复制
<MySortableContainer
  axis="xy"
  onSortEnd={this.onSortEnd}
  useDragHandle
>{chartDivs}</MySortableContainer>

在进行临时包装之前,我能够完成以下操作

代码语言:javascript
复制
const chartDivs = elements.map(({childName}, index) => {
      return <MyElement
              ref={r => this.refsCollection[childName] = r}
...

有没有人知道如何在临时包装之后实现同样的目标?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-01-14 03:53:36

密钥来自源代码:https://github.com/clauderic/react-sortable-hoc/blob/master/src/SortableElement/index.js#L82

getWrappedInstance()函数

我想,在你的原始代码之后:

代码语言:javascript
复制
// this is my fake MyElement Component
class MyElement extends React.Component {
  render () {
    return (
      <div className='my-element-example'>This is test my element</div>
    )
  }
}

// this is your origin ListContainer Component
class OriginListContainer extends React.Component {
  render () {
    const elements = [
      { childName: 'David' },
      { childName: 'Tom' }
    ]

    return (
      <div className='origin-list-container'>
        {
          elements.map(({ childName }, index) => {
            return <MyElement key={index} ref={r => this.refsCollection[childName] = r} />
          })
        }
      </div>
    )
  }
}

现在您需要导入react-sortable-hoc

代码语言:javascript
复制
import { SortableElement, SortableContainer } from 'react-sortable-hoc'

首先创建新的Container Component

代码语言:javascript
复制
const MySortableContainer = SortableContainer(({ children }) => {
  return <div>{children}</div>;
})

然后使MyElement成为可排序的

代码语言:javascript
复制
/**
 * Now you have new MyElement wrapped by SortableElement
 */
const SortableMyElement = SortableElement(MyElement, {
  withRef: true
})

这里是导入:

  • 您应该使用SortableElement(MyElement, ...SortableElement((props) => <MyElement {...props}/>,第二个计划将使ref支柱成为null
  • { withRef: true }使您可以通过getWrappedInstance获得参考

好了,现在你可以像在ref={r => this.refsCollection[childName] = r.getWrappedInstance()} />之后那样得到你的前裁判了

这是完整的代码:

代码语言:javascript
复制
const MySortableContainer = SortableContainer(({ children }) => {
  return <div>{children}</div>;
})

/**
 * Now you have new MyElement wrapped by SortableElement
 */
const SortableMyElement = SortableElement(MyElement, {
  withRef: true
})

class ListContainer extends React.Component {
  refsCollection = {}

  componentDidMount () {
    console.log(this.refsCollection)
  }

  render () {
    const elements = [
      { childName: 'David' },
      { childName: 'Tom' }
    ]

    return (
      <MySortableContainer
        axis="xy"
        useDragHandle
      >
        {
          elements.map(({ childName }, index) => {
            return (
              <SortableMyElement
                index={index}
                key={index}
                ref={r => this.refsCollection[childName] = r.getWrappedInstance()} />
            )
          })
        }
      </MySortableContainer>
    )
  }
}

附加

呃..。

在我说:您应该使用SortableElement(MyElement, ... to SortableElement((props) => <MyElement {...props}/>__之前,第二个计划将使ref支柱成为null

如果您真的想使用回调函数,可以使用“后”:

代码语言:javascript
复制
const SortableMyElement = SortableElement(forwardRef((props, ref) => <MyElement ref={ref} {...props} />), {
  withRef: true
})

但在这里,不是,真正使用了forwardRef

呃..。选择你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59726434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档