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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

React.js

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

Q&A

解決済

1回答

1469閲覧

Reactでいいねボタンを表示させたい

yuu0000

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

React.js

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

0グッド

0クリップ

投稿2021/06/07 09:32

Reactでいいね機能を実装しているがいいねボタンが表示されない原因を解決したい

現在、RailsアプリケーションでReactを用いていいね機能の実装をしているのですが、react-bootstrap-iconsを導入していいねボタンを表示させようとしたが、ブラウザ上にボタンが表示されない。

ボタンが表示されない原因やヒントなどをご教授願えますでしょうか。

該当のソースコード

app/javascript/bundles/Favorite.jsx

jsx

1import PropTypes from 'prop-types'; 2import React, { useState } from 'react'; 3import { HeartFill } from 'react-bootstrap-icons'; 4import axios from 'axios' 5 6axios.defaults.headers['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); 7 8const Favorite = (props) => { 9 const { uploadId, favoriteId } = props; 10 const [id, setId] = useState(favoriteId); 11 // const [count, setCount] = useState(0) 12 13 const clicked = async () => { 14 if (id == null) { 15 const { data: { id = null } } = await axios.post('/favorites', { upload_id: uploadId }) 16 id && setId(id); 17 } else { 18 await axios.delete(`/favorites/${id}`) 19 setId(null); 20 } 21 } 22 23 return ( 24 <> 25 <HeartFill 26 color={id ? 'red' : '#616161'} 27 size={25} 28 onClick={clicked} 29 /> 30 </> 31 ); 32}; 33 34Favorite.propTypes = {}; 35 36export default props => <Favorite {...props} />;

また、import PropTypes from 'prop-types';が未使用と表示されてしまう。

app/javascript/packs/bundle.js

import ReactOnRails from 'react-on-rails'; import Favorite from '../bundles/Favorite'; // This is how react_on_rails can see the HelloWorld in the browser. ReactOnRails.register({ Favorite, });

app/views/uploads/index.html.erb

erb

1<% @uploads.each do |upload| %> 2 <div class="content-page"> 3 <%= link_to upload_path(upload.id), class: "upload-link", method: :get do %> 4 <div class="upload-contents-wrapper"> 5 <div class="upload-img-contents"> 6 <%= image_tag upload.image, class: "upload-img" if upload.image.attached? %> 7 </div> 8 <div class="upload-contents-detail"> 9 <div class="upload-name"><%= upload.title %></div> 10 <div class="tag-container"> 11 <% upload.tags.each do |tag| %> 12 <div class="upload-tags"> 13 #<%= tag.name %> 14 </div> 15 <% end %> 16 </div> 17 </div> 18 <div class="upload-contents-explain"> 19 <div class="upload-explain"><%= upload.text %></div> 20 </div> 21 <% end %> 22 <div class="footer-content"> 23 <div class="upload-user"> 24 <%= link_to image_tag(upload.user.avatar, class: "avatar-img"), user_path(upload.user.id) %> 25 <%= link_to upload.user.name, user_path(upload.user.id), class: "upload-user__name" %> 26 </div> 27 <div class="favorite"> 28 <p><%= react_component("Favorite", props: { uploadId: upload.id, favoriteId: upload.favorite_by(current_user)&.id }, prerender: false) %></p> 29 </div> 30 </div> 31 </div> 32 </div> 33 <% end %>

app/controllers/favorites_controller.rb

ruby

1class FavoritesController < ApplicationController 2 def create 3 favorite = current_user.favorites.create!(favorite_params) 4 render json: favorite 5 end 6 7 def destroy 8 favorite = Favorite.find(params[:id]) 9 favorite.destroy 10 render json: favorite 11 end 12 13 private 14 15 def favorite_params 16 params.require(:favorite).permit(:upload_id) 17 end 18end 19

試したこと

$ yarn add react-bootstrap-iconsでアップロード済みなのでいいねボタンが表示されるようにしたが、ブラウザ上で表示されなかった。

index.html.erbにコンポーネントが組み込まれているか再度確認したところ、<%= react_component~以下省略を記述しているためコンポーネント自体は読み込まれていた。

補足情報(FW/ツールのバージョンなど)

開発環境
・rubymine
・ruby(3.0.1)
・Ruby on rails (6.1.3.1)

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

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

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

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

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

guest

回答1

0

自己解決

application.html.erbに下記のように記述したところ解決しました。

<%= javascript_pack_tag 'bundle' %>

原因としては、Reactで作成したファイルがindex.html.erbにレンダリングできていないため表示されておりませんでした。

投稿2021/06/07 11:15

yuu0000

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問