Redux/Reactネイティブアプリケーションのコンポーネントを返すステートレス関数があります。Redux状態の更新は、コンポーネントのステートレス関数内のメソッドに渡されません。
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
を受信するようにこのコードを修正するにはどうすればよいですか?
さらに多くのコンポーネントをReduxに接続することは価値があります。 – Scimonster
プッシュとポップは突然変異関数なので、 'props.navigator.push()'と 'props.navigator.pop()'を使ってあなたの小道具を突然変異させています。これは、リアクションコードの巨大な赤旗です。 –
@Scimonsterこの時点で、EditTaskはコンテナ経由でReduxに接続されています。他のカスタムコンポーネントであるTasksListCellはまだ接続されていません。それを接続することは正しい道を私を送るでしょうか? –