이 기사에서는 Javascript와 ReactJS를 사용하여 자동 저장 기능을 구현하는 방법을 살펴보겠습니다. 자동 저장 기능은 응용 프로그램이 사용자가 입력한 내용을 자동으로 저장하려고 할 때 편리합니다. 온라인 양식, Excel 등과 같은 응용 프로그램에는 이러한 자동 저장 기능이 필요합니다.
아래에 언급된 구현을 심층적으로 이해하려면 Javascript 및 React(v16)에 대한 기본 지식이 필요합니다.
단순화를 위해 여기에서는 온라인 코드 편집기 StackBlitz 를 사용하여 기본 ReactJS 프로젝트를 만들었습니다. 코드는 참조용으로 이 문서의 끝에 있습니다.
프로젝트는 아래와 같이 구현됩니다.
src/index.js루트 파일입니다 . 파일을 가져오고 src/App.js콘텐츠를 렌더링합니다.
src/App.js사용자 입력을 처리하고 콘텐츠를 브라우저의 sessionStorage 에 자동 저장하는 핵심 논리가 있습니다. src/App.js구성 요소를 가져오고 src/components/customInput/CustomInput.js사용자 입력을 받는 데 사용됩니다.
프로젝트 폴더 구조 섹션 에서 언급했듯이 은 App.js사용자 입력( 에서 수신)을 처리 하고 콘텐츠를 sessionStorageCustomInput.js 에 저장(자동) 하는 핵심 구성 요소입니다.
//App.js
import React, { useState, useRef } from 'react';
import CustomInput from './components/customInput/CustomInput';
import './style.css';
// Save action will be triggered after SAVE_AFTER_MS milliseconds have passed since user's last input.
const SAVE_AFTER_MS = 1000;
export default function App() {
const [inputValue, setInputValue] = useState(() => '');
const [isSaving, setIsSaving] = useState(() => false);
const autoSaveTimer = useRef(); //Using ref would help to retain timer value between component re-renders.
const handleInput = (e) => {
const {
target: { value = '' },
} = e;
setInputValue(value);
if (autoSaveTimer.current) {
//If user inputs before the specified delay has ended then cancel perviously saved timer
clearTimeout(autoSaveTimer.current);
}
setIsSaving(true);
autoSaveTimer.current = setTimeout(() => {
sessionStorage.setItem('draft', value);
clearTimeout(autoSaveTimer.current);
setIsSaving(false);
}, SAVE_AFTER_MS);
};
return (
<div>
<h1>Auto-save Implementation</h1>
<span class="alignText">
<p>Draft Status: </p>
<p class={isSaving ? 'orangeText' : 'greenText'}>
{isSaving ? 'Saving... ' : 'Saved'}
</p>
</span>
<CustomInput value={inputValue} onChange={handleInput} />
<span class="alignText">
<p>Saved draft to storage: </p>
<p>{sessionStorage.getItem('draft')}</p>
</span>
</div>
);
}
//CustomInput.js
import React from 'react';
import styles from './CustomInput.module.css';
const CustomInput = ({
type = 'text',
placeholder = 'Enter text',
onChange,
value = '',
...props
}) => {
return (
<input
type={type}
placeholder={placeholder}
onChange={onChange}
value={value}
className={styles.inputRoot}
{...props}
/>
);
};
export default CustomInput;
App.jsinputValue 상태 변수를 업데이트합니다.() => {
sessionStorage.setItem('draft', value);
clearTimeout(autoSaveTimer.current);
setIsSaving(false);
}
PS 콘텐츠가 마음에 들었다면 박수를 쳐주세요. 질문/제안 사항이 있는 경우 아래 의견에 자유롭게 추가하십시오.
읽어 주셔서 감사합니다.
머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.
이번 주에 저는 일일 이메일 목록의 회원으로부터 이메일을 받았습니다. 그들은 알고 싶어했습니다. 매일, 매주, 매월 어떤 리소스를 방문합니까? 좋은 질문입니다! 제 작업 흐름과 제가 사용하는 주요 리소스에 대한 통찰력을 공유하게 되어 기쁩니다.
당신이 자라면 세상은 있는 그대로이고 당신의 삶은 단지 세상 안에서 당신의 삶을 사는 것이며, 결코 당신의 생명을 위험에 빠뜨리지 않고, 정해진 길을 따르고 결국 죽고, 벽을 너무 세게 치세요.하지만 그것은 매우 제한된 삶입니다.
“Siri야, Olivia Dean의 Me Dive 재생해줘.” 나이지리아 아쿠레에 있는 Future Academy Africa에서 인턴십을 시작한 것은 2021년 5월이었습니다.
햇빛의 첫 번째 광선이 평원의 서리가 내린 풀을 비추는 서쪽 언덕의 눈부신 황금빛 아침입니다. 온화하고 거대한 새까만 앵거스 소 떼가 일출을 배경으로 윤곽을 그리며 다져진 길을 따라 모두가 잘 아는 지역으로 향합니다. 조식 바.
facebook.com에 요청하면 컴퓨터가 도메인 이름을 조회하여 해당 도메인 이름을 IP 주소로 변환하므로 컴퓨터가 해당 연결을 만들 수 있습니다.