setParams 不适用于回调函数
setParams is not working on callback function
为了在屏幕中使用状态,我将回调函数作为前一个屏幕的道具发送。
要在用户在 TagStyle
上按 header 上的 'save' 按钮时调用 onCheck
,我将 onCheck
函数发送到 TagStyle
来自 屏幕 A
的屏幕
_handleTagStylePress = () => {
this.props.navigation.navigate('TagStyle', {onCheck: this.onCheck, selectedStyleIds: this.state.selectedStyleIds});
}
屏幕 A 中定义的 onCheck 函数 更改状态和 navigation.state.params。这里我不能setParams。我确认 this.props.navigation 有 setParams 方法,但不知何故它什么也没做。
_setSelectedStyleIds = (selectedStyleIds) => {
console.log(selectedStyleIds); <- correctly printed [1,2,3,4,5]
const action = NavigationActions.setParams({ params: {selectedStyleIds},
key: 'id-1509842157447-6' });
this.props.navigation.dispatch(action); <- no params change at all
this.props.navigation.setParams({styleIds:selectedStyleIds}); <- no params change at all
this.setState({selectedStyleIds});
}
onCheck = ({selectedStyleIds}) => {
console.log(selectedStyleIds); <- correctly printed [1,2,3,4,5]
this._setSelectedStyleIds(selectedStyleIds);
console.log(this.props); <- result showing below
// navigation.state.params.selectedStyleIds: []
this.setState({selectedStyleIds}); <- setState is working
// state = {selectedStyleIds:[1,2,3,4,5]}
}
console.log(this.props);打印
Object {
"dispatch": [Function anonymous],
"navigation": Object {
"dispatch": [Function anonymous],
"goBack": [Function goBack],
"navigate": [Function navigate],
"setParams": [Function setParams],
"state": Object {
"key": "id-1509771947484-6",
"params": Object {
"bigType": "Top",
...
...
...
"selectedStyleIds": Array [],
...
},
"routeName": "AddClotho",
},
},
"screenProps": undefined,
}
TagStyle 屏幕
static navigationOptions = ({ navigation }) => ({
headerRight: (
<RkButton
rkType='clear'
onPress={() => {
console.log(navigation.state.params.selectedStyleIds) <- [1,2,3,4,5]
navigation.state.params.onCheck({selectedStyleIds: navigation.state.params.selectedStyleIds});
navigation.goBack();
}}>
<RkText rkType="header3">SAVE</RkText>
</RkButton>
),
})
我猜 this.props.navigation.setParams 设置的不是屏幕 A 中的当前参数,而是某处的参数。我找不到如何进一步解决或调试这个问题。
对此有一个更可控的方法。您可以尝试以下方法吗?
import { NavigationActions } from 'react-navigation';
...
const setParamsAction = NavigationActions.setParams({
params: { onCheck: /* YOUR FUNCTION */ },
key: 'ROUTE FOR PARAM CHANGE',
});
this.props.navigation.dispatch(setParamsAction);
为了在屏幕中使用状态,我将回调函数作为前一个屏幕的道具发送。
要在用户在 TagStyle
上按 header 上的 'save' 按钮时调用 onCheck
,我将 onCheck
函数发送到 TagStyle
来自 屏幕 A
_handleTagStylePress = () => {
this.props.navigation.navigate('TagStyle', {onCheck: this.onCheck, selectedStyleIds: this.state.selectedStyleIds});
}
屏幕 A 中定义的 onCheck 函数 更改状态和 navigation.state.params。这里我不能setParams。我确认 this.props.navigation 有 setParams 方法,但不知何故它什么也没做。
_setSelectedStyleIds = (selectedStyleIds) => {
console.log(selectedStyleIds); <- correctly printed [1,2,3,4,5]
const action = NavigationActions.setParams({ params: {selectedStyleIds},
key: 'id-1509842157447-6' });
this.props.navigation.dispatch(action); <- no params change at all
this.props.navigation.setParams({styleIds:selectedStyleIds}); <- no params change at all
this.setState({selectedStyleIds});
}
onCheck = ({selectedStyleIds}) => {
console.log(selectedStyleIds); <- correctly printed [1,2,3,4,5]
this._setSelectedStyleIds(selectedStyleIds);
console.log(this.props); <- result showing below
// navigation.state.params.selectedStyleIds: []
this.setState({selectedStyleIds}); <- setState is working
// state = {selectedStyleIds:[1,2,3,4,5]}
}
console.log(this.props);打印
Object {
"dispatch": [Function anonymous],
"navigation": Object {
"dispatch": [Function anonymous],
"goBack": [Function goBack],
"navigate": [Function navigate],
"setParams": [Function setParams],
"state": Object {
"key": "id-1509771947484-6",
"params": Object {
"bigType": "Top",
...
...
...
"selectedStyleIds": Array [],
...
},
"routeName": "AddClotho",
},
},
"screenProps": undefined,
}
TagStyle 屏幕
static navigationOptions = ({ navigation }) => ({
headerRight: (
<RkButton
rkType='clear'
onPress={() => {
console.log(navigation.state.params.selectedStyleIds) <- [1,2,3,4,5]
navigation.state.params.onCheck({selectedStyleIds: navigation.state.params.selectedStyleIds});
navigation.goBack();
}}>
<RkText rkType="header3">SAVE</RkText>
</RkButton>
),
})
我猜 this.props.navigation.setParams 设置的不是屏幕 A 中的当前参数,而是某处的参数。我找不到如何进一步解决或调试这个问题。
对此有一个更可控的方法。您可以尝试以下方法吗?
import { NavigationActions } from 'react-navigation';
...
const setParamsAction = NavigationActions.setParams({
params: { onCheck: /* YOUR FUNCTION */ },
key: 'ROUTE FOR PARAM CHANGE',
});
this.props.navigation.dispatch(setParamsAction);