mirror of
https://github.com/status-im/react-native.git
synced 2025-02-04 05:34:15 +00:00
[ReactNative] Remove Navigator onItemRef
Summary: onItemRef is old and no longer needed now that the parent renders the scenes. This removes it from Navigator and all of our clients. This is a breaking change to users of Navigator, but it is easy to transition to a ref in renderScene instead
This commit is contained in:
parent
74f8055692
commit
c3e75393ab
@ -220,11 +220,6 @@ var Navigator = React.createClass({
|
|||||||
*/
|
*/
|
||||||
onDidFocus: PropTypes.func,
|
onDidFocus: PropTypes.func,
|
||||||
|
|
||||||
/**
|
|
||||||
* Will be called with (ref, indexInStack, route) when the scene ref changes
|
|
||||||
*/
|
|
||||||
onItemRef: PropTypes.func,
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Optionally provide a navigation bar that persists across scene
|
* Optionally provide a navigation bar that persists across scene
|
||||||
* transitions
|
* transitions
|
||||||
@ -318,7 +313,6 @@ var Navigator = React.createClass({
|
|||||||
onPanResponderMove: this._handlePanResponderMove,
|
onPanResponderMove: this._handlePanResponderMove,
|
||||||
onPanResponderTerminate: this._handlePanResponderTerminate,
|
onPanResponderTerminate: this._handlePanResponderTerminate,
|
||||||
});
|
});
|
||||||
this._itemRefs = {};
|
|
||||||
this._interactionHandle = null;
|
this._interactionHandle = null;
|
||||||
this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]);
|
this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]);
|
||||||
},
|
},
|
||||||
@ -1006,22 +1000,10 @@ var Navigator = React.createClass({
|
|||||||
return this.state.routeStack.slice();
|
return this.state.routeStack.slice();
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleItemRef: function(itemId, route, ref) {
|
|
||||||
this._itemRefs[itemId] = ref;
|
|
||||||
var itemIndex = this.state.idStack.indexOf(itemId);
|
|
||||||
if (itemIndex === -1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.props.onItemRef && this.props.onItemRef(ref, itemIndex, route);
|
|
||||||
},
|
|
||||||
|
|
||||||
_cleanScenesPastIndex: function(index) {
|
_cleanScenesPastIndex: function(index) {
|
||||||
var newStackLength = index + 1;
|
var newStackLength = index + 1;
|
||||||
// Remove any unneeded rendered routes.
|
// Remove any unneeded rendered routes.
|
||||||
if (newStackLength < this.state.routeStack.length) {
|
if (newStackLength < this.state.routeStack.length) {
|
||||||
this.state.idStack.slice(newStackLength).map((removingId) => {
|
|
||||||
this._itemRefs[removingId] = null;
|
|
||||||
});
|
|
||||||
this.setState({
|
this.setState({
|
||||||
sceneConfigStack: this.state.sceneConfigStack.slice(0, newStackLength),
|
sceneConfigStack: this.state.sceneConfigStack.slice(0, newStackLength),
|
||||||
idStack: this.state.idStack.slice(0, newStackLength),
|
idStack: this.state.idStack.slice(0, newStackLength),
|
||||||
@ -1031,38 +1013,22 @@ var Navigator = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_renderScene: function(route, i) {
|
_renderScene: function(route, i) {
|
||||||
var child = this.props.renderScene(
|
|
||||||
route,
|
|
||||||
this
|
|
||||||
);
|
|
||||||
var disabledSceneStyle = null;
|
var disabledSceneStyle = null;
|
||||||
if (i !== this.state.presentedIndex) {
|
if (i !== this.state.presentedIndex) {
|
||||||
disabledSceneStyle = styles.disabledScene;
|
disabledSceneStyle = styles.disabledScene;
|
||||||
}
|
}
|
||||||
var originalRef = child.ref;
|
|
||||||
if (originalRef != null && typeof originalRef !== 'function') {
|
|
||||||
console.warn(
|
|
||||||
'String refs are not supported for navigator scenes. Use a callback ' +
|
|
||||||
'ref instead. Ignoring ref: ' + originalRef
|
|
||||||
);
|
|
||||||
originalRef = null;
|
|
||||||
}
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
key={this.state.idStack[i]}
|
key={'scene_' + i}
|
||||||
ref={'scene_' + i}
|
ref={'scene_' + i}
|
||||||
onStartShouldSetResponderCapture={() => {
|
onStartShouldSetResponderCapture={() => {
|
||||||
return (this.state.transitionFromIndex != null) || (this.state.transitionFromIndex != null);
|
return (this.state.transitionFromIndex != null) || (this.state.transitionFromIndex != null);
|
||||||
}}
|
}}
|
||||||
style={[styles.baseScene, this.props.sceneStyle, disabledSceneStyle]}>
|
style={[styles.baseScene, this.props.sceneStyle, disabledSceneStyle]}>
|
||||||
{React.cloneElement(child, {
|
{this.props.renderScene(
|
||||||
ref: component => {
|
route,
|
||||||
this._handleItemRef(this.state.idStack[i], route, component);
|
this
|
||||||
if (originalRef) {
|
)}
|
||||||
originalRef(component);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user