从兄弟姐妹那里传球

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从兄弟姐妹那里传球相关的知识,希望对你有一定的参考价值。

我正在使用库react-native-dropdownaler,当我在ref中为它创建App而不是在每个屏幕中添加组件时,我想简单地将其ref传递给我的Router并稍后使用它。将ref传递给兄弟姐妹的问题是 - 它们都在一起渲染所以当我通过ref时它仍然是undefined

render() {
  return (
    <View style={styles.container}>
      <StatusBar />
       <Router alertRef={this.alertRef}/>
       <DropdownAlert ref={ref => (this.alertRef = ref)} />
    </View>
  );
}
答案

您可以使用createRef API创建refcurrent属性在第一次渲染之后仍然不会被设置。

class App extends React.Component {
  alertRef = React.createRef();

  render() {
    return (
      <View style={styles.container}>
        <StatusBar />
        <Router alertRef={this.alertRef} />
        <DropdownAlert ref={this.alertRef} />
      </View>
    );
  }
}
另一答案

我将传递组件本身,并镜像组件中的方法:

render() {
 return (
  <View style={styles.container}>
    <StatusBar />
    <Router alertRef={this}/>
    <DropdownAlert ref={ref => (this.alertRef = ref)} />
  </View>
 );
}

alertWithType(type, title, message) {
  this.alertRef.alertWithType(type, title, message);
}
另一答案

我最终得到的解决方案是:

class App extends Component {

  constructor(props) 
  super(props)
  this.state = {alertRef:null}

  componentDidMount() {
    this.setState({alertRef:this.alertRef})
  }


  render() {
    return (
      <View style={styles.container}>
        <StatusBar />
        {this.state.alertRef && (
          <Router
            alertRef={this.state.alertRef}
            language={this.props.language}
          />
        )}
        <DropdownAlert ref={ref => (this.alertRef = ref)} />
      </View>
    );
  }

}

以上是关于从兄弟姐妹那里传球的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中的兄弟姐妹之间从父级共享状态

兄弟组件通信角度6

如何使用 css 选择器从特定类中查找所有下一个兄弟姐妹

(CSS / jQuery/ XPath) 用于从姐妹/兄弟节点 (DOM) 获取内部文本的选择器

选择除兄弟姐妹和自我之外的所有元素

将 UITableViewCell 放在兄弟姐妹的下方