0

我试图在任务中添加图片,然后更新平面列表以查看更新,但它没有。如果我关闭并返回应用程序,它会起作用。如果我显示商店,我还会看到即时更新,但不是在我的屏幕上。

这是我的代码的一部分:

任务图像.js


    openImageLibrary=async(task)=>{
      const result = await ImageHelpers.openImageLibrary();
      if(result){
        const downloadUrl=await this.uploadImage(result,task)
        this.props.UpdateTaskImage({...task,uri:downloadUrl})
      }
    }


....
const mapStateToProps=state=>{
    return{
      tasks:state.tasks
    };
  }
  
  const mapDispatchToProps=dispatch=>{
    return{
      loadTasks:tasks=> dispatch({type:'LOAD_TASKS_FROM_SERVER',payload:tasks}),
      addTask:task=>dispatch({type:'ADD_TASK',payload:task}),
      DeleteTask: task=>dispatch({type:'DELETE_TASK',payload:task}),
      UpdateTaskImage:task=>dispatch({type:'UPDATE_TASK_IMAGE',payload:task}) 
    }
  }

TasksReducer.js:

const initialState={
    tasks:[],
    image:null
}

const tasks=(state=initialState,action)=>{
    switch(action.type)
    {
        case 'LOAD_TASKS_FROM_SERVER':
            return{
                ...state,
                tasks:action.payload
            };
    case 'UPDATE_TASK_IMAGE':
        return{
            ...state,
            tasks:state.tasks.map(task=>{
            if(task.task==action.payload.task)
            {
                return {...task,image:action.payload.uri}
            }
            return task
            })
        }
        default:
            return state;
    }
};

export default tasks;

任何想法..?

4

1 回答 1

0

查看更多代码会有所帮助,但这就是我认为我所看到的。redux 更新后 Flatlist 项目如何更新?我认为可能是您的问题是 Flatlist 道具也没有映射到 redux 状态或直接从该组件的tasks道具传递下来。Flatlist 将在其 prop 更改时重新渲染data,因此请确保是这种情况。

除了这个考虑之外,请确保在任何情况下您都正确使用了 redux。我认为您可能错过了对该connect函数的调用。请参阅使用此示例的redux 官方文档

// TodoList.js

function mapStateToProps(state) {
  const { todos } = state
  return { todoList: todos.allIds }
}

export default connect(mapStateToProps)(TodoList)
于 2021-04-21T17:02:34.290 回答