[RN 3-2 프로젝트 개발 1]
2020. 2. 21. 23:06ㆍReact Native/React Native 일정관리 앱
반응형
하단의 + 버튼을 클릭하면, 입력 창 다이얼로그 띄우면서 뒷배경은 불투명도로 조정
- (-) 버튼을 클릭하면 삭제됨
- 앱이 종료되어도 데이터가 사라지지 않음 (데이터 유지)
1. 전역 데이터 저장할 Context 생성
src/Context/TodoListContext/@types/
index.d.ts
더보기
interface ITodoListContext {
todoList: Array<string>;
addTodoList: (todo: string) => void;
removeTodoList: (index: number) => void;
}
2. 컨텍스트 정의
src/Context/TodoListContext/
index.tsx
더보기
import React, { createContext, useState, useEffect } from 'react';
import AsyncStorage from '@react-native-community/async-storage';
interface Props {
children: JSX.Element | Array<JSX.Element>;
}
const TodoListContext = createContext<ITodoListContext>({
todoList: [],
addTodoList: (todo: string): void => {},
removeTodoList: (index: number): void => {},
});
const TodoListContextProvider = ({ children }: Props) => {
const [todoList, setTodoList] = useState<Array<string>>([]);
const addTodoList = (todo: string): void => {
const list = [...todoList, todo];
setTodoList(list);
AsyncStorage.setItem('todoList', JSON.stringify(list));
};
const removeTodoList = (index: number): void => {
let list = [...todoList];
list.splice(index, 1);
setTodoList(list);
AsyncStorage.setItem('todoList', JSON.stringify(list));
};
const initData = async () => {
try {
const list = await AsyncStorage.getItem('todoList');
if (list !== null) {
setTodoList(JSON.parse(list));
}
} catch (e) {
console.log(e);
}
};
useEffect(() => {
initData();
}, []);
return (
<TodoListContext.Provider
value={{
todoList,
addTodoList,
removeTodoList,
}}>
{children}
</TodoListContext.Provider>
);
};
export { TodoListContextProvider, TodoListContext };
3) 프로바이더 설정
src/
App.tsx
더보기
import React from 'react';
import Styled from 'styled-components/native';
import { TodoListContextProvider } from '~/Context/TodoListContext';
import Todo from './Screens/Todo';
const Container = Styled.View`
flex: 1;
background-color: #EEE;
`;
const App = () => {
return (
<TodoListContextProvider>
<Container>
<Todo />
</Container>
</TodoListContextProvider>
);
};
export default App;
5) Todo 컴포넌트
src/Screens/Todo/
index.tsx
더보기
import React from 'react';
import Styled from 'styled-components/native';
import TodoListView from './TodoListView';
import AddTodo from './AddTodo';
const Container = Styled.View`
flex: 1;
`;
interface Props {}
const Todo = ({ }: Props) => {
return (
<Container>
<TodoListView />
<AddTodo />
</Container>
);
};
export default Todo;
반응형
'React Native > React Native 일정관리 앱' 카테고리의 다른 글
[RN 3-4 프로젝트 개발 3] (0) | 2020.02.22 |
---|---|
[RN 3-3 프로젝트 개발 2] (0) | 2020.02.22 |
[RN 3-1 프로젝트 준비] (0) | 2020.02.21 |