반응형
반응 - "localStorage is not defined" 오류가 표시됨
제 웹사이트 SEO를 메타 태그로 친근하게 만들려고 합니다.응용 프로그램에 서버 측 렌더링을 구현하고 있습니다.그 후, 다음의 에러가 표시됩니다.
ReferenceError: localStorage가 정의되지 않았습니다.
해결 방법을 알려주세요.
나의package.json
:
{
"main": "server.js",
"scripts": {
"start-dev": "NODE_ENV=development webpack -w & NODE_ENV=development node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.18.0",
"express": "^4.15.3",
"firebase": "^4.12.1",
"html2canvas": "^1.0.0-alpha.12",
"react": "^16.2.0",
"react-adsense": "0.0.5",
"react-dom": "^16.2.0",
"react-facebook-login": "^4.0.1",
"react-google-login": "^3.2.1",
"react-meta-tags": "^0.3.0",
"react-router-dom": "^4.2.2",
"react-router-match-as-promised": "^1.0.5",
"react-scripts": "1.1.1",
"react-share": "^2.1.1",
"react-slick": "^0.22.3"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react-app": "^3.1.2",
"babel-preset-stage-0": "^6.24.1",
"css-loader": "^0.28.4",
"extract-text-webpack-plugin": "^2.1.2",
"file-loader": "^0.11.2",
"postcss-loader": "^2.0.6",
"webpack": "^3.1.0",
"webpack-node-externals": "^1.7.2"
}
}
모든 페이지에서 일반적으로 사용되는 메타 태그입니다.Home.js
<code>
import React, { Component } from 'react';
import axinst from '../common';
import {TabBox,TabBox2,TabBox3} from '../common/tabbox';
import Ads from '../common/ads';
import SubscribeFrm from '../common/subscribefrm';
import MetaTags from 'react-meta-tags';
import AdSense from 'react-adsense';
import Loader from '../common/loader';
class Home extends Component {
constructor(props) {
super(props);
}
state = {
header:[],
otherSports:[],
wizztalk:[],
sports:[],
isProgress:'',
activeCat: '',
metaTitle:'',
metaDesc:'',
metaKey:''
}
componentDidMount(){
// axinst.get('/home')
this.setState({isProgress:true});
axinst.get('/home').then(response => {
this.setState({isProgress:false});
const header = response.data.data.Header;
const sports = response.data.data.Sports;
const otherSports = response.data.data.OtherSports;
const wizztalk = response.data.data.Wizztalk;
const metaTitle = response.data.data.metaTitle;
const metaDesc = response.data.data.metaDesc;
const metaKey = response.data.data.metaKeyword;
this.setState({header});
this.setState({sports});
this.setState({otherSports})
this.setState({wizztalk});
this.setState({metaTitle});
this.setState({metaDesc});
this.setState({metaKey});
}).catch(function (error) {
// console.log(error);
// console.log('error');
});
}
render() {
const hD = this.state.header;
const sport = this.state.sports;
return (
<div id="maincontent">
<MetaTags>
<title>{this.state.metaTitle}</title>
<meta name="title" content={this.state.metaTitle} />
<meta name="keywords" content={this.state.metaKeyword} />
<meta name="description" content={this.state.metaDesc} />
<meta name="og:description" content={this.state.metaDesc} />
<meta name="og:title" content={this.state.metaTitle} />
<meta name="og:image" content={process.env.PUBLIC_URL +"/images/logo.png"}/>
</MetaTags>
</code>
서버에서 렌더링할 때 브라우저가 없으므로 localStorage를 포함하여 브라우저에서 제공하는 모든 API에 액세스할 수 없습니다.
서버와 클라이언트(브라우저) 양쪽에서 동작하는 JavaScript 코드에서는, 통상, 에 대해서,if
창이 정의되어 있는지 여부를 확인하는 절입니다."윈도"는 브라우저에서 제공하는 모든 API에 대해 브라우저에서 제공하는 루트 객체입니다.
예:
if (typeof window !== 'undefined') {
console.log('we are running on the client')
} else {
console.log('we are running on the server');
}
당신의 경우, 전화를 걸려고 합니다.localStorage
이렇게 해서if
예를 들어 다음과 같습니다.
if (typeof window !== 'undefined') {
localStorage.setItem('myCat', 'Tom');
}
이 오넬라이너가 해줬어요
const checkout = typeof window !== 'undefined' ? localStorage.getItem('checkout') : null
앱에 폴리필을 추가할 수 있습니다.즉, 당신의 어딘가에서index.js
:
if (!window) {
require('localstorage-polyfill');
}
저 같은 경우에는useEffect
localStorage를 사용하기 전에 페이지가 로드될 때까지 기다립니다.
컴포넌트 로직이 절대적으로 다음 값에 의존할 경우 이는 보다 신뢰할 수 있는 접근법입니다.lsVar
조건부로 무언가를 렌더링합니다.
const Component = () => {
if (typeof window === "undefined") return null;
const lsVar = localStorage.getItem("lsVar");
// component logic
return (<></>);
}
언급URL : https://stackoverflow.com/questions/52474208/react-localstorage-is-not-defined-error-showing
반응형
'programing' 카테고리의 다른 글
구조체에 대한 JSON 문자열 구문 분석 방법 (0) | 2023.02.22 |
---|---|
pymongo.pymongo.pymongo.matCursorNotFound: 커서 ID '...'이(가) 서버에서 유효하지 않습니다. (0) | 2023.02.22 |
스프링 부트 2.1에서 Data Source bean 덮어쓰기 (0) | 2023.02.22 |
AJP 커넥터가 secretRequired="true"로 구성되어 있지만 2.2.5로 업그레이드한 후 비밀 속성이 null 또는 ""입니다. (0) | 2023.02.22 |
암호화된 워드프레스 관리자 암호를 해독하는 방법 (0) | 2023.02.22 |