访问父组件变量
Accessing Parent Component Variable
我试图将我的Openlayers应用程序表达为基于组件的应用程序。有一个像<Marker />
这样的孩子的<Map />
组件,我需要从<Marker />
访问我的<Map />
组件的this.map
属性。
从具象组件中获取此标记:
<Map center={[-1.81185, 52.44314]} zoom={6}>
<Marker title="This is a marker" coordinate={[-1.81185, 52.44314]} />
</Map>
<Map />
组件:
export default class Map extends React.Component {
static propTypes = {
center: React.PropTypes.array.isRequired,
zoom: React.PropTypes.number.isRequired
}
constructor(props) {
super(props);
this.map = null;
}
componentDidMount() {
this.map = new ol.Map(/* code removed for brevity */);
}
renderChildren() {
const { children } = this.props;
if (!children) return;
return React.Children.map(children, c => {
return React.cloneElement(c, {
map: this.map
});
})
}
render() {
return <div id="map">{this.renderChildren()}</div>
}
}
<Marker />
组件:
export default class Marker extends React.Component {
static propTypes = {
map: React.PropTypes.object,
coordinate: React.PropTypes.array.isRequired,
title: React.PropTypes.string
}
componentDidMount() {
const { map, coordinate, title } = this.props;
if (!map) return;
var marker = createMarkerAndPlaceOn(map);
}
render() {
return null;
}
}
如您所见,我尝试通过克隆元素并为其提供属性来向下传递 this.map
属性。
但是,由于我需要依赖 DOM 节点#map
进行渲染,所以我可以先在 <Map />
的 componentDidMount()
方法中初始化我的new ol.Map()
。这意味着我的子组件在渲染时没有获得this.map
的实例。
有没有干净的、非反模式的方法来实现这一点?
您可以将
map
存储在state
中,一旦准备好,它就会传给孩子们。
constructor(props) {
super(props);
this.state = {
map: null
}
this.renderChildren = this.renderChildren.bind(this);
}
componentDidMount() {
this.setState({map : new ol.Map()});
}
renderChildren() {
const { children } = this.props;
if (!children)
return;
if(!this.state.map)
return <div>Loading markers</div>
return React.Children.map(children, c => {
return React.cloneElement(c, {
map: this.state.map
});
})
}
斯菲德尔
相关文章:
- GoogleMap JSX组件中未定义的变量
- 带有KendoUI组件的Javascript变量作用域
- 使用Handlebars从动态变量渲染组件
- 使用*ngIf+模板变量+loadIntoLocation以编程方式将组件加载到视图中
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- React:未捕获的不变量冲突:ReactDOM.render():无效的组件元素
- Vue.js 在另一个组件的一个组件中使用变量
- 带组件变量的角 2 管/过滤器
- Angular2 - 组件变量/组件类属性上的双向数据绑定
- 每次加载页面时,火狐附加组件访问变量
- 如何在 foreach 循环中使用 JavaScript 变量之前从 JavaScript 变量中删除或排除组件
- 将变量从反应路由器传递到子组件
- 如何处理 React 0.12+ 中的组件引用变量和 props
- 如何使用 React.createElement 基于 prop 或变量动态创建组件
- KnockoutJS:访问自定义组件之外的可观察变量
- 访问变量从RxJS subscribe()函数中声明了一个组件
- React-将一个变量传递给另一个组件
- Angular 2 -如何在组件中插入变量
- 自定义React Native UI组件:不变量冲突
- 如何在$.ajax的回调函数中更改组件视图中的变量