Open yaogengzhu opened 5 years ago
在常规Taro数据流中,props 是父组件与子组件交互的唯一方式,要修改子元素,需要用新的props去重新渲染子元素,然而呢,在少数情况下,我们需要在常规的数据流外强制修改子元素,被修改的子元素可以是taro上的组件实例,或者是一个dom元素。
当然,我们会首先想到使用的是refs属性来更新组件,如果是这种情况。需要更多关注在组件中使用state。通常较高几杯的state更为的清楚表达,。;。。通常呢,相比在Dialog组件中暴露的open() 和close() 方法。最好传递isOpen属性 。
refs
通过字符串创建的ref
只要把一个字符串的名称赋值给ref
prop. 然后可以通过this.refs
访问到被定义组件和实例或DOM元素。
class Commo extends Component {
componentDidMount () {
if ( process.env.TARO_ENV === 'wxapp' {
// 这里的this.refs.input 访问的时候,通过`wx.createSeletorQuery` 取到小程序的原生组件
} else if ( process.env.TAEO_ENV === h5') {
// 这里的this.refs.input 访问到是 `@tarojs/components`中的`Input` 组件实例
}
render () {
return <Input ref='input' />
}
}
class MyComponent extends Component {
roar () {
// 会打印 `miao, miao, miao~`
this.cat.miao()
}
refCat = (node) => this.cat = node // `this.cat` 会变成 `Cat` 组件实例的引用
render () {
return <Cat ref={this.refCat} />
}
}
class Cat extends Component {
miao () {
console.log('miao, miao, miao~')
}
render () {
return <View />
}
}
Refs 还是使用 Taro.createRef() 创建的,并通过 ref 属性附加到 Taro 元素。在构造组件时,通常将 Refs 分配给实例属性,以便可以在整个组件中引用它们。
当 ref 被传递给 render 中的元素时,对该节点的引用可以在 ref 的 current 属性中被访问。
class MyComponent extends Component {
this.cat = Taro.createRef()
roar () {
// 会打印 `miao, miao, miao~`
this.cat.current.miao()
}
render () {
return <Cat ref={this.cat} />
}
}
class Cat extends Component {
miao () {
console.log('miao, miao, miao~')
}
render () {
return <View />
}
}
使用react封装一个组件
看封装组件的代码~~~~~
看如何掉调用