是否有可能将promise数据值分配给外部变量?
我想做类似的事情:
export default class LocationSearchInput extends Component {
constructor(props) {
super(props);
this.state = {address: ''}
}
handleChange = (address) => {
this.setState({ address });
};
handleSelect = (address) => {
geocodeByAddress(address)
.then(results => getLatLng(results[0]))
.then(latLng => console.log(latLng))
.catch(error => console.error('Error', error));
};
render() { ........
在这个例子中,我得到了我想要的东西:latLng,但我不能在外面使用它。它在SearchBox.js文件中我希望将它包含在另一个Map.js文件中。我是新手,非常感谢!
答案 0 :(得分:0)
处理这种情况的最佳方法是在topMost父项中有一个函数,需要使用latLng
并让它调用API并将LatLng
保存在状态并传递此值作为LocationSearchInput
和其他需要它的组件的道具
class Parent extends React.Component {
handleGeocodeByAddress(address) {
geocodeByAddress(address)
.then(results => getLatLng(results[0]))
.then(latLng => this.setState({ latLng }))
.catch(error => console.error('Error', error));
}
render() {
return <Child layLng={this.state.latLng} handleGeocodeByAddress={handleGeocodeByAddress} />
}
}
并从子
调用父函数export default class LocationSearchInput extends Component {
constructor(props) {
super(props);
this.state = {address: ''}
}
handleChange = (address) => {
this.setState({ address });
};
handleSelect = (address) => {
this.props.handleGeocodeByAddress(address);
};
render() { ........
答案 1 :(得分:-1)
最简单的方法是将latLng
存储在全局window
对象上,如下所示:
window.latLng = latLng;
然后,您可以Map.js
访问window.latLng
,然后使用latLng
。
然而,这不是一个很好的做法。它污染了您的全局对象(虽然使用命名空间在某种程度上缓解了这种情况)并且由于您异步检索Map.js
,因此当latLng
代码尝试访问它时,该变量可能不可用。
处理此问题的更好方法是将Map.js
值传递给父组件,然后将其移回Map.js
所需的位置。您还可以发出事件并从public UserControl1()
{
InitializeComponent();
this.Loaded += UserControl1_Loaded;
}
void UserControl1_Loaded(object sender, RoutedEventArgs e)
{
Window window = Window.GetWindow(this);
window.Closing += window_Closing;
}
void window_Closing(object sender, global::System.ComponentModel.CancelEventArgs e)
{
//Save your settings here
}