![](/img/trans.png)
[英]How can I update the parent state by calling a function within a switch in my stateless component ?
[英]Redux state updates don't pass through to a method within my component's stateless function
我有一个无状态函数,该函数为Redux / React Native应用程序返回一个组件。 其中包含一些已定义的辅助函数:
export default function TasksList (props) {
let ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
const _onLongPress = (rowData) => {
props.changeCurrentlyEditedTask(rowData.index, rowData)
props.navigator.push({
component: EditTask,
title: props.selectedTaskText,
leftButtonTitle: 'Cancel',
rightButtonTitle: 'Save',
onLeftButtonPress: () => _cancelEditingTask(),
onRightButtonPress: () => _saveEditedTask()
})
}
const _cancelEditingTask = () => {
props.navigator.pop();
props.resetSelectedTask();
}
const _saveEditedTask = () => {
props.saveEditedTask()
props.navigator.pop();
}
const dataSource = ds.cloneWithRows(props.listOfTasks);
return (
<View style={ styles.tasksListContainer }>
<TextInput
autoCorrect={ false }
onChangeText={ (text) => props.onChangeText(text) }
onSubmitEditing={ () => props.addTask(props.text) }
returnKeyType={ 'done' }
style={ styles.tasksListTextInput }
value={ props.text } />
<ListView
automaticallyAdjustContentInsets={ false }
dataSource={ dataSource }
enableEmptySections={ true }
renderRow={ (rowData, secctionID, rowID) => {
return (
<TasksListCell
completed={ rowData.completed }
id={ rowID }
onLongPress={ (rowID) => _onLongPress(rowData) }
onPress={ (rowID) => props.changeCompletionStatus(rowData.index) }
text={ rowData.text }
completed={ rowData.completed }
formattedDate={ rowData.hasOwnProperty('formattedDate') ? rowData.formattedDate : undefined } />
)
}
}
style={ styles.tasksListView } />
</View>
);
};
每当我的Redux状态更改时,其更改就会按预期扩散到TasksList。 但是, _saveEditedTask
无法接收这些更新。
如果我试图通过props
作为参数传递给我的saveEditedTask
在我的容器调度方法,没有收到父更新的状态TasksList
功能一样。
如何修复此代码,以使_saveEditedTask
从其父TasksList
函数接收最新的props
?
目前,已定义_saveEditedTask函数,并且实际上可以访问TasksList组件的道具。
问题是您没有将此函数作为道具传递给render方法中的所有子项。
您应该在组件的render方法中将以下属性提供给子级之一。 如果您不这样做,则该函数将永远不会被调用。
onSave={ () => _saveEditedTask() }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.