質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

172閲覧

Reduxでの画像表示について

KAI

総合スコア7

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2024/09/12 09:47

編集2024/09/12 10:23

イメージ説明### 実現したいこと
使用PC MacBook Air
①Reduxで自身のFinderに入っている画像を表示したい。
②別件になってしまいますが、ファイルをimportする際に使用できないファイル名などがあれば教えていただきたいです。

ファイル構成は画像を参照ください。

発生している問題・分からないこと

①Reduxで自分が用意した画像をsrcフォルダ以下のimgフォルダに入れてimgタグのsrc属性にパスを指定しましたが、画像が表示されません。
②ファイルimportについて
ファイルをimport/exportする際に時折一定のファイル名だとうまくいかない場合があります。
今までそこまで気にしていなかったのですが、質問させていただきます。
原因は不明ですが、大文字小文字の「i」などが関連した際にエラーが多く起きる気がします。
エラーが出るような(もしくはエラーはでないが正常に読み込まれない)仕様があれば教えていただきたいです。

「該当のソースコード」には本件のReduxを構成する4つのファイルを載せています。
toolkitなどのimport分やあまり関連の無いコードは記載を省いています。

該当のソースコード

CartSlice.js

1import cartItems from "../../cartitem"; 2 3const initialState = { 4 cartItems: cartItems, 5 amount: 4, 6 total: 0, 7}; 8 9const cartSlice = createSlice({ 10 name: "cart", 11 initialState, 12 reducers: {}, 13}); 14 15 export default cartSlice.reducer; 16

cartitem.js

1↓SliceのinitialState値 2const cartItems = [ 3 { 4 id: 1, 5 title: “テスト”, 6 price: "12000", 7 img: "./img/Test.jpg", 8 amount: 1, 9 }, 10 { 11 〜〜〜省略〜〜〜 12 }, 13]; 14 15export default cartItems;

CartContainer.js

1 2import Alist from './Alist'; 3 4const CartContainer = () => { 5 const { amount, cartItems, total } = useSelector((state) => state.cart) 6 if( amount < 1 ) { 7 return ( 8   〜〜〜省略〜〜〜 9 ); 10 } 11 12 return ( 13 <section className='cart'> 14 <div> 15 {cartItems.map((item) => { 16 return <Alist key={item.id} {...item}/> 17 })} 18 </div> 19 </section> 20 ) 21}; 22 23export default CartContainer

Alist.js

1 2 3const Alist = ({ id, img, title, price, amount }) => { 4 return ( 5 <article className='cart-item'> 6 <img src={img} alt="画像" /> 7 <h4>{img}</h4> 8↑H4で{img}の内容を確認したところ、propsのimg(./img/Test.jpg)が受け取れていました。 9 </div> 10 </article> 11 ) 12} 13 14export default Alist 15

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Reactで画像を表示さ得るにはパスをimportすると出てきたのですが、Reduxの場合それをどのように実装するのかというところです。
しかし、下記のようにApp.jsで試しに実施しても画像が表示されなかったので、画像表示に関して全く解決策がわからない状態です。
import test from './img/Test.jpg'
function App() {
return (
<main>
<Navbar />
<CartContainer />
<img src="test" alt="テスト"/>
</main>
);
}
export default App;

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuichi-works

2024/09/12 13:36

Alist.jsからimgフォルダを参照する場合は提供コードでは「./img/Test.jpg」となっていますが、Alist.jsからだと1階層上で「../img/Test.jpg」が正しい気がするのですがどうでしょうか?
KAI

2024/09/13 07:46

ご回答ありがとうございます。 変更してみましたが、ダメでした。
ryuichi-works

2024/09/13 08:42 編集

App.jsで試しているコードですがimgタグのsrc属性の値がimportしてきた変数でなく、そのままのtestという文字列になっているようです。 <img src="test" alt="テスト"/> 下記のように修正してもTest.jpgが表示されませんか。相対パスはこちらの場合は『./img/Test.jpg』で合っている思います。 <img src={test} alt="テスト"/> もしくは直接 <img src="./img/Test.jpg" alt="テスト"/>
KAI

2024/09/16 12:56

// ご回答ありがとうございます。 // ご教授いただきました下記のコードで画像が表示されました。 // import test from '../img/Test.jpg' // <img src={test} alt="画像" /> // ですが、今回stateのcartItemsのimgプロパティより画像パスを参照したい状況です。 // この場合、cartitemファイルからのパス指定は下記になるかと思います。 // import test from './img/Test.jpg' // const cartItems = [ // { // id: 1, // title: “テスト”, // price: "12000", // img: {test}, // amount: 1, // }, // { // 〜〜〜省略〜〜〜 // }, // ]; // export default cartItems; // しかし表示がされませんでした。 Reduxのstate(initialState)として別ファイルからimportして画像パス指定する場合何か違う書き方が必要なのでしょうかね? 調べても、分からなかったので教えていただけますと幸いです。
guest

回答1

0

まず前提知識を共有させていただきます。「画像をどのように組み込むか」は、フレームワークまたはビルドツールの関心事です。なので、Redux とは関係ありません。

  • フレームワークの例: Next.js, Remix
  • ビルドツールの例: create-react-app, Vite

提示されたディレクトリ構造から察するに、create-react-app を使用されているようなので、create-react-app の公式ページから、関係する記述を探してみました。

https://create-react-app.dev/docs/adding-images-fonts-and-files
https://create-react-app.dev/docs/using-the-public-folder/

ここから分かることは、

  1. まず、画像ファイルを import する ことが第一の選択肢
    • create-react-app によってセットアップされた webpack というバンドラーの仕事です。
  2. import に適さないシーンであれば、第二の選択肢として、public フォルダを使う

です。


import した画像の使い方は、上記のページに書いてあるのが全てですが、提示されたコードで import を使うには、このように書きます。

ちなみに、test の中身は、もとのファイル名にぐちゃぐちゃした文字列が追加されたものになっている、と思います。このぐちゃぐちゃはハッシュと呼ばれるもので、平たく言うと「画像を更新して、デプロイしたのに、ずっと古い画像が表示されてしまう」という事態を避けるための方法です。

tsx

1import test from './img/Test.jpg' 2// test 変数に、画像のパスが入ります。 3// ビルド・デプロイされても、ちゃんとデプロイ後の画像パスが test 変数に入っています。 4 5function App() { 6 console.log(test); 7 // このように console.log を使えば、 8 // test の正体がただの「画像パスの入った変数」であることが分かります。 9 10 11 return ( 12 <main> 13 <Navbar /> 14 <CartContainer /> 15 <img src={test} alt="テスト"/> 16 </main> 17 ); 18} 19export default App;

投稿2024/09/13 13:24

編集2024/09/13 13:24
honey32

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問