Javascript Redux状态更新don';t传递到我的组件中的方法';无状态函数

Javascript Redux状态更新don';t传递到我的组件中的方法';无状态函数,javascript,reactjs,react-native,redux,Javascript,Reactjs,React Native,Redux,我有一个无状态函数,它为我的Redux/React本机应用程序返回一个组件。其中包含一些已定义的辅助函数: export default function TasksList (props) { let ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }); const _onLongPress = (rowData) => { props.changeCurrent

我有一个无状态函数,它为我的Redux/React本机应用程序返回一个组件。其中包含一些已定义的辅助函数:

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>
  );
};
导出默认函数任务列表(道具){
设ds=new ListView.DataSource({
行已更改:(r1,r2)=>r1!==r2
});
const_onLongPress=(行数据)=>{
props.changeCurrentlyEditedTask(rowData.index,rowData)
道具,导航器,推({
组件:编辑任务,
标题:props.selectedTaskText,
LeftButtonTile:“取消”,
右按钮:“保存”,
onLeftButtonPress:()=>\u cancelEditingTask(),
OnRightButton按:()=>\u saveEditedTask()
})
}
常量取消编辑任务=()=>{
props.navigator.pop();
props.resetSelectedTask();
}
const_saveEditedTask=()=>{
props.saveEditeTask()
props.navigator.pop();
}
const dataSource=ds.cloneWithRows(props.listOfTasks);
返回(
props.onChangeText(文本)}
onSubmitEditing={()=>props.addTask(props.text)}
returnKeyType={'done'}
style={styles.tasksListTextInput}
value={props.text}/>
{
返回(
_onLongPress(行数据)}
onPress={(rowID)=>props.changeCompletionStatus(rowData.index)}
text={rowData.text}
completed={rowData.completed}
formattedDate={rowData.hasOwnProperty('formattedDate')?rowData.formattedDate:undefined}/>
)
}
}
style={styles.tasksListView}/>
);
};
每当我的Redux状态发生变化时,它的变化就会按照预期扩散到TasksList。但是,
\u saveEditedTask
无法接收这些更新

如果我试图将
props
作为参数传递给容器中的我的
saveEditeTask
分派方法,它不会收到父
TasksList
函数的更新状态


如何修复此代码,以便
\u saveEditedTask
从其父
TasksList
函数接收最新的
道具

此时已定义了 问题是您没有将此函数作为道具传递给render方法中的任何子级

您应该在组件的渲染方法中将下面的道具指定给其中一个子级。如果不这样做,则永远不会调用该函数

onSave={ () => _saveEditedTask() }

目前_saveEditedTask函数已经定义,并且实际上可以访问TaskList组件的道具

问题是您没有将此函数作为道具传递给render方法中的任何子级

您应该在组件的渲染方法中将下面的道具指定给其中一个子级。如果不这样做,则永远不会调用该函数

onSave={ () => _saveEditedTask() }

将这些组件中的更多组件连接到Redux可能是值得的。Push和pop是变异函数,因此使用
props.navigator.Push()
props.navigator.pop()
是变异您的道具。这是React代码中的一个巨大的红旗。@此时,EditTask通过一个容器连接到Redux。另一个自定义组件TasksListCell尚未连接。连接它会让我走上正确的道路吗?@DanielBank感谢你的提醒;您建议我如何处理导航?@RichardKho这可能会有所帮助。将这些组件中的更多组件连接到Redux可能是值得的。Push和pop是变异函数,因此使用
props.navigator.Push()
props.navigator.pop()
会变异您的道具。这是React代码中的一个巨大的红旗。@此时,EditTask通过一个容器连接到Redux。另一个自定义组件TasksListCell尚未连接。连接它会让我走上正确的道路吗?@DanielBank感谢你的提醒;你会建议我如何处理我的导航?@RichardKho这可能会有所帮助。