- 投稿日:2020-04-06T23:47:44+09:00
webpack使ってるReactをNetlifyに上げたら環境変数が読めなくて困った
環境
react: 16.13.1
webpack: 4.42.0
dotenv: 8.2.0webpack設定ファイル内でのdotenvをいい感じに設定する
参考までに
package.json
のscriptを置いておきます。package.json"scripts": { "start": "webpack-dev-server --hot --inline --config webpack.development.js", "build": "webpack --config webpack.production.js",こんな感じで、開発環境と本番環境でwebpackの設定ファイルを分けていました。参考: https://webpack.js.org/guides/production/
で、開発環境だと
.env
の内容が読めているのに、本番ではNetlifyのGUIで設定した環境変数が読めてなくて困ってました。というのも、Dotenvは.env
を探しにいくけど、.env
はgitで管理しないので本番に上がらず…という次第ですね。設定をこんな感じに変えたら読めました。
webpack.production.jsconst Dotenv = require('dotenv-webpack'); module.exports = { mode: 'production', 略 plugins: [ new Dotenv({ systemvars: true })
systemvars: true
が肝です。
systemvars
の他にもオプションがありました。とかとか、Dotenvについての詳細はこちら。
https://www.npmjs.com/package/dotenv-webpack#properties
- 投稿日:2020-04-06T23:47:05+09:00
【28日目】React(propsとstate) 学習メモ
はじめに
progateが終わり、
Reactチュートリアルを進めようとしましたが、
理解できず諦めました。
先週の土日は勉強より、今後どうしていくかに時間を費やしました。得られた事
- 質問できる方を見つけた
- 今後の方針を決めた(UdemyとYoutubeでの学習)
- 環境構築
今日より勉強再開していきます。
propsとstate
import React from "react"; import {render} from "react-dom" class Human extends React.Component{ {/*Humanのクラスを作る*/} constructor(props){ {/*引数にpropsを取る 引数なので与える側と受け取る側がいる*/} super(props); this.state={name:"masa"}; {/*state:状態を示す とりあえず定数と思っておこう*/} } render(){ return( {/*下記をHumanに返す*/} <h2> {this.state.name}, {/*stateは内部に持っている値*/} {this.props.age} {/*propsは外部に持っている値*/} </h2>); } } render(<Human age="30"/>,document.getElementById("root")); {/*Humanのageを決めている*/}
- 投稿日:2020-04-06T14:31:07+09:00
reactでボタンクリックでコピーさせる | JavaScript
- 投稿日:2020-04-06T02:37:56+09:00
reactの立ち上げ方
npm install -g create-react-app
でインストール
npx create-react-app プロジェクト名
でフォルダ作成
cd プロジェクト名で移動して
yarn startor
npm start
- 投稿日:2020-04-06T00:26:13+09:00
解決方法: "Error: Invariant failed: You should not use <Link> outside a <Router>"
はじめに
react-router-hash-link
を使ってreactアプリを作っている時につまずいた備忘録です。コード
React.jsimport React, { Component } from 'react'; import { HashLink } from 'react-router-hash-link'; export default function hoge() { return ( <HashLink to="./hoge#hoge" smooth> hoge </HashLink> ) }エラー
console.logUncaught Error: Invariant failed: You should not use <Link> outside a <Router> at invariant (tiny-invariant.esm.js:10) at Link.js:84 at updateContextConsumer (react-dom.development.js:18304) at beginWork (react-dom.development.js:18661) at HTMLUnknownElement.callCallback (react-dom.development.js:188) at Object.invokeGuardedCallbackDev (react-dom.development.js:237) at invokeGuardedCallback (react-dom.development.js:292) at beginWork$1 (react-dom.development.js:23203) at performUnitOfWork (react-dom.development.js:22154) at workLoopSync (react-dom.development.js:22130) at performSyncWorkOnRoot (react-dom.development.js:21756) at scheduleUpdateOnFiber (react-dom.development.js:21188) at updateContainer (react-dom.development.js:24373) at react-dom.development.js:24758 at unbatchedUpdates (react-dom.development.js:21903) at legacyRenderSubtreeIntoContainer (react-dom.development.js:24757) at Object.render (react-dom.development.js:24840) at Module../src/index.js (index.js:8) at __webpack_require__ (bootstrap:784) at fn (bootstrap:150) at Object.1 (serviceWorker.js:141) at __webpack_require__ (bootstrap:784) at checkDeferredModules (bootstrap:45) at Array.webpackJsonpCallback [as push] (bootstrap:32) at main.chunk.js:1発生条件と解決方法
どうもstorybookはreact-routerに依存したサードパーティのコンポーネントを追加することを予期していないようで、対象コンポーネントを
react-router-dom
の<MemoryRouter/>
で囲ってあげれば対応できるっぽいです。
また同様のことがreact-redux
の<Provider/>
の外でconnect
やuseSelecter
を使った場合などにも生じるようです。ただ今回は別にstorybookを使っているわけでもないのでとりあえず該当のコードを
<Memoryrouter/>
で囲うことで解決しました。React.jsimport React, { Component } from 'react'; import { MemoryRouter} from 'react-router-dom'; import { HashLink } from 'react-router-hash-link'; export default function hoge() { return ( <MemoryRouter> <HashLink to="./hoge#hoge" smooth> hoge </HashLink> <MemoryRouter> ) }storybookに追加する際のエラーでもこれと同様に
<MemoryRouter/>
で囲う他、addDecolator
を用いる方法もあるようです。以下の記事を参照してみてください。参考
https://github.com/storybookjs/storybook/issues/8892
https://qiita.com/daikiojm/items/da3299d7b90d38194d85