🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
React.js

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

Q&A

1回答

4204閲覧

ReactJSでSwiperを使い、動的コンテンツを自動でスライドさせることについて

kenzukenju

総合スコア0

React.js

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

0グッド

0クリップ

投稿2021/01/09 13:49

前提・実現したいこと

前提として、ReactJsでSwiper Reactを活用しようとしています。
実現したいことは動的な要素が自動で動くスライダーを作ることです。

(またこちらが初めての質問でして、失礼なこと・情報不足がありましたらお伝えください。)

発生している問題・エラーメッセージ

発生している問題としては、スライダーが自動で動かないことです。
ただ初期の画像とメッセージは表示されています。

以下の状況では、スライダーが自動で動くことが確認できています。

  • mapで動的に <SwiperSlide> 内を生成するのではなく、静的なコンテンツを自動で動かす
  • 一度画面表示をした後に、画面更新をせずに、再度compileをするとスライダーが自動で動く
  • (不明確で恥ずかしいのですが)console画面などを確認したりしていると動く

また現象として、4枚の画像をmapで動的に<SwiperSlide>内で生成しているのですが、初期はindex=3(最後の画像)が表示されています。

該当のソースコード

ReactJS

1import React from 'react'; 2import { Slider } from '../slider/slider'; 3 4 5export class SwiperList extends React.Component { 6 render() { 7 return ( 8 <div className="hero"> 9 <div className="slide"> 10 <Slider swiperContents={this.props.swiperContents} /> 11 </div> 12 </div> 13 ) 14 } 15}

ReactJS

1import React from 'react'; 2 3import { Swiper, SwiperSlide} from 'swiper/react'; 4import SwiperCore, { Autoplay } from 'swiper'; 5import 'swiper/swiper.scss'; 6 7SwiperCore.use([Autoplay]); 8 9export class Slider extends React.Component { 10 render() { 11 return ( 12 <div> 13 <Swiper 14 autoplay={{ 15 delay: 500, 16 disableOnInteraction: false 17 }} 18 loop={true} 19 > 20 { 21 this.props.swiperContents.map((swiperContent,index) => { 22 return ( 23 <SwiperSlide key={index}> 24 <img src={swiperContent.mediaUrl} key={swiperContent.id} alt="" /> 25 <p className="msg">{swiperContent.text}</p> 26 </SwiperSlide> 27 ) 28 }) 29 } 30 </Swiper> 31 </div> 32 ) 33 } 34} 35

console画面にあるReact Componentsには以下の表示がされています。

Swiper [ForwardRef]  SwiperSlide key=".$3-duplicate-3-append" [ForwardRef]  SwiperSlide key=".$0" [ForwardRef]  SwiperSlide key=".$1" [ForwardRef]  SwiperSlide key=".$2" [ForwardRef]  SwiperSlide key=".$3" [ForwardRef]  SwiperSlide key=".$0-duplicate-0-prepend" [ForwardRef]

試したこと

  • <SwiperSlide>をメソッドでrender
  • shouldSwiperUpdate={true},rebuildOnUpdate= {true},observer= {true}<Swiper>に付与

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

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

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

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

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

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

guest

回答1

0

[Swiper のドキュメント](Swiper API https://swiperjs.com/api/)を漁ってみましたがどうやらコレ、動的に要素を追加することはあまり考えて作られてないらしいです。`Virtual` という設定もあるようですが「loopauto 使えへんで」と言ってますし……。react-id-swiperなら React に適した形で key を生成してくれたり、動的にコンテンツを追加したらレンダリングし直す機能もありますし、もちろん Swiper 自身のオプションも使えますのでこちらを使うのが良さそうです。

投稿2021/01/10 02:58

A_kirisaki

総合スコア2853

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問