React Js를 통해 Google 시트에 맞춤 양식 데이터 제출
27073 단어 programmingjavascriptreactwebdev
이를 위한 요구 사항은 다음과 같습니다.
가장 먼저 할 일은 반응 앱을 만드는 것입니다.
작동하는 반응 환경을 설정하는 create-react-app 명령으로 이를 수행하는 방법을 배울 수 있습니다https://create-react-app.dev/.
그런 다음 필요하지 않은 불필요한 파일을 정리합니다.
가장 먼저 할 일은 반응 양식을 만드는 것입니다.
import React, {useState, useRef} from 'react'
const Form = () => {
const formRef = useRef(null)
return (
<div>
<form method="post" ref={formRef} name="google-sheet">
<div className="form-style">
<input type="" name="name" placeholder='Your Name *' />
</div>
<div className="form-style">
<input type="email" name="email" placeholder='Your Email *' />
</div>
<div className="form-style">
<input type="number" name="phone" placeholder='Your Phone *' />
</div>
<div className="form-style">
<input type="submit" name="submit" value="Login" />
</div>
</form>
</div>
)
}
export default Form
이 작은 스니펫에서는 사용자가 이름, 이메일, 전화번호와 같은 세부정보를 입력할 수 있는 양식을 만들었습니다. 또한 useRef 후크에 의해 생성된 formRef 가변 개체로 데이터를 보내는 제출 버튼도 포함했습니다.
다음 단계는 데이터를 저장하는 데 사용할 Google 스프레드시트를 연 다음 각 양식 입력 이름을 열 머리글로 추가하는 것입니다.
그런 다음 Extensions → App Scripts로 이동한 다음 이 코드를 앱 스크립트에 복사합니다. 이 스크립트는 게시물 요청의 데이터를 수락하고 Google 시트에 저장하는 기능을 생성합니다.
var sheetName = 'Sheet1'
var scriptProp = PropertiesService.getScriptProperties()
function intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', activeSpreadsheet.getId())
}
function doPost (e) {
var lock = LockService.getScriptLock()
lock.tryLock(10000)
try {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
.setMimeType(ContentService.MimeType.JSON)
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally {
lock.releaseLock()
}
}
이것은 스크립트의 환경입니다
저장한 다음 권한을 추가합니다. 다음은 스크립트를 실행한 다음 스크립트를 배포하는 것입니다. 액세스를 "Anyone"으로 변경했는지 확인하면 스프레드시트에 데이터를 게시하는 데 사용되는 링크가 생성됩니다.
이 작업이 완료되면 생성된 API 링크를 사용하여 양식의 데이터를 스프레드시트로 보내는 기능을 빌드하기 위해 반응 앱으로 돌아갑니다.
양식을 제출할 함수를 추가합니다. 이 함수는 post 메서드를 사용한 가져오기 요청입니다. 양식 데이터를 게시하고 이전 이미지/배포에서 얻은 URL을 사용합니다.
const scriptUrl = "get yours by practicing"
const handleSubmit = (e) =>{
e.preventDefault()
fetch(scriptUrl, {method: 'POST', body: new FormData(formRef.current)})
.then(res => {
console.log("SUCCESSFULLY SUBMITTED")
})
.catch(err => console.log(err))
}
"form"태그에는 제출 중에 handleSubmit 함수를 호출하는 onSubmit ={handleSubmit} 속성이 있어야 합니다.
최종 코드와 전체 코드는 styled-component를 사용한 스타일 지정과 함께 아래에 있습니다.
import React, {useState, useRef} from 'react'
import styled from 'styled-components'
const Form = () => {
const formRef = useRef(null)
const scriptUrl = "get yours by practicing"
const [loading, setLoading] = useState(false)
const handleSubmit = (e) =>{
e.preventDefault()
setLoading(true)
fetch(scriptUrl, {
method: 'POST',
body: new FormData(formRef.current),
}).then(res => {
console.log("SUCCESSFULLY SUBMITTED")
setLoading(false)
})
.catch(err => console.log(err))
}
return (
<FormStyle>
<div className="container">
<form ref={formRef} onSubmit={handleSubmit} name="google-sheet">
<div className="input-style">
<label htmlFor='name'>
Name
</label>
<input type="text" id="name" name="name" placeholder='Your Name *' />
</div>
<div className="input-style">
<label htmlFor='name'>Email</label>
<input type="email" name="email" placeholder='Your Email *' />
</div>
<div className="input-style">
<label htmlFor='name'>Phone No</label>
<input type="number" name="phone" placeholder='Your Phone *' />
</div>
<div className="input-style">
<input type="submit" value={loading ? "Loading..." : "SEND MESSAGE"} />
</div>
</form>
</div>
</FormStyle>
)
}
export default Form
const FormStyle = styled.div`
display: flex;
justify-content: center;
align-items: center;
.container{
background-color: #F9CFF2;
margin-top: 10%;
padding: 10rem 10rem 10rem 10rem;
display: flex;
justify-content: center;
align-items: center;
@media(max-width: 610px){
padding: 4rem 4rem 4rem 4rem;
}
.input-style{
padding-top: 0.8em;
display: flex;
flex-direction: column;
gap: 0.8em;
label{
font-family: 'Poppins', sans-serif;
}
input{
outline: none;
border: none;
padding: 0.8em;
border-radius: 2em;
}
input[type=submit]{
background-color: #52154E;
color: #FFFFFFFF;
font-weight: bold;
}
}
}
`
코드에 문제가 있는 경우 아래에 댓글을 달거나 트위터 @SegunTuase에서 저를 때리십시오.
Reference
이 문제에 관하여(React Js를 통해 Google 시트에 맞춤 양식 데이터 제출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulos/submitting-custom-form-data-to-google-sheets-via-react-js-19al텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)