简体   繁体   English

解决 promise 时如何重新渲染反应功能组件

[英]How to re-render react functional component when a promise is resolved

I'm trying to figure out a simple todo app in react using typescript.我正在尝试使用 typescript 找出一个简单的待办事项应用程序。 the newly created todo doesn't reflect on the list.新创建的待办事项不会反映在列表中。 am trying to figure out what went wrong here我想弄清楚这里出了什么问题

my react component我的反应组件

const service = new TodoService();

function App() {

  useEffect(()=>{
    service.getAllTodos();
  }); 

  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <TodoContainer items={service.allTodos} onNewTodoCreated={description => {service.createTodo(description)}} />
      </header>
    </div>
  );
}

export default App;

the TodoContainer takes list of items and newtodoCreated as props TodoContainer 将项目列表和 newtodoCreated 作为道具

and my service和我的服务

export default class TodoService {
    public allTodos: TodoItem[] = [
        {dateCreated: new Date(), id: v4(), description: "Fetch Milk" },
        {dateCreated: new Date(), id: v4(), description: "Buy iPhone" },
        {dateCreated: new Date(), id: v4(), description: "Impress at DWIT" },
    ]
    
    getAllTodos(): Promise<TodoItem[]> {
        return new Promise<TodoItem[]>((resolve) => {
             setTimeout(() => resolve(this.allTodos), 3000);
        });
    }

    createTodo(description: string): Promise<TodoItem> {

        return new Promise<TodoItem>((resolve) => {
            const id = uuidv4();
            const dateCreated = new Date();
            setTimeout(() => {
                const saved = {description, id, dateCreated};
                this.allTodos.push(saved);
                resolve(saved);
            }, 2000);
        })
    }
}

You need to use useState hook here, something like so你需要在这里使用useState钩子,像这样

 function App() { const [todos, setTodos] = useState([]); useEffect(()=>{ service.getAllTodos().then(todos => setTodos(todos)); }, []); const handleCreate = (description) => service.createTodo(description).then(todo => { /* @TODO update state */ }) } return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <TodoContainer items={todos} onNewTodoCreated={handleCreate} /> </header> </div> ); } export default App;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 React 避免功能组件的重新渲染 - React Avoid Re-Render for Functional Component 强制重新渲染反应功能组件 - Force re-render in react functional component 在功能反应组件中无限重新渲染 - Infinite re-render in functional react component React 功能组件不会重新渲染 - React functional component does not re-render React功能组件,数据删除后如何重新呈现 - React functional component, how to re-render after data is removed 如何防止使用功能组件重新渲染并反应钩子? - How to prevent a re-render with a functional component and react hooks? 当 promise 解析时如何重新渲染 React 组件? | 如何在数据加载之前阻止渲染? - How to re-render React Component when promise resolves? | How to block render until data loads? 如何在反应原生功能组件中创建有价值的并且在更新时不会触发重新渲染? - How can create the valuable in react native functional component and it doesn't trigger a re-render when update it? 使用功能组件更改状态时如何防止重新渲染 - How to prevent Re-render in react when the state is changed using Functional Component 无法在 React Native 项目(功能组件)中重新渲染视图 - Unable to re-render view in React Native project (functional component)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM