【问题标题】:How to update attribute value by using ref in react native?如何通过在 react native 中使用 ref 来更新属性值?
【发布时间】:2018-12-05 08:54:15
【问题描述】:

在下面的代码中有“opened”属性,我想通过使用 ref 来更改它的值。这里我使用 ref 作为索引数组。

<Menu renderer={renderers.SlideInMenu} ref={(Menu) => { this.rowRefs[item.id] = Menu; }} opened={false}>

我试过了

function updateRef(id){
  React.findDOMNode(this.refs.id).setAttribute("opened", true);
}

谁能解释一下如何创建索引引用以及如何使用它?

【问题讨论】:

    标签: react-native react-ref


    【解决方案1】:

    道具应该是不可变的,为了动态change更新它们,你应该考虑通过状态来设置它们。

    您的代码应如下所示:

    <Menu renderer={renderers.SlideInMenu} ref={component => this.menuRef = component }} opened={this.state.opened}>
    

    在这种情况下,&lt;Menu .. &gt; 假定在具有状态变量 opened 的组件中呈现,您可以使用 this.setState({opened: true}) 更改该状态变量。此状态更改将使您的 UI 重新呈现,因此 &lt;Menu .. &gt; 将使用 opened={true} 呈现。

    此外,如果您想使用ref,那么您应该考虑在Menu 中创建一个状态变量,该变量应该使用opened 属性进行初始化,并且您应该在Menu 中有一个方法,它将改变状态。

    您的代码应如下所示:

    class Menu extends React.Component {
        constructor (props) {
           super(props);
           this.state = {
               menuOpened: props.opened
           }
        }
    
        changeMenuOpened = (value) => {
           this.setState({
               menuOpened: value
           })
        }
    
        .....
    }
    

    然后您可以使用来自父级的Menu 的引用调用changeMenuOpened 方法。

    this.menuRef.changeMenuOpened(true);
    

    【讨论】:

    • 我认为 ref 不适用于索引数组。你有这方面的例子吗?
    • 在构造函数中创建一个数组,比如this.itemRefs = [],并将refs推入其中,使用时,从数组中取出并像this.itemRefs[x].something()一样使用它。使用这样的引用没有限制,因为行的底部都是 JS 对象。 :)
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2021-01-03
    • 2019-10-25
    • 2018-09-28
    相关资源
    最近更新 更多