この画像ライトボックスをReactアプリで使用しようとしています:
これは、試したコードサンドボックスリンクです
画像モーダルは私にとってはうまく機能します。しかし、スライダーを実装しようとすると機能しないようです。各リストにスライダーを実装したいと思います。バックエンドから画像データを取得しています。
これが私がすべての画像データを取得する方法です:
{
"results": [{
"data": [{
"id": "f06f2cdf-1bb8-4388-a655-4e916a2703ce",
"visitRequirementList": [{
"imageName": "dining pic 1",
"imagePath": "visitImageDirectory/0297b1ef-644b-45fc-9760-4e5693f54ac0.png",
}, {
"imageName": "dining pic 2",
"imagePath": "visitImageDirectory/1b4915c1-733a-4bdb-a8d7-59ce3a095d44.png",
}]
}, {
"id": "ce059d7a-d3d4-462c-a90f-62be13f24a29",
"visitRequirementList": [{
"imageName": "bedroom pic 1",
"imagePath": "visitImageDirectory/64960b86-f9bf-4de9-816f-f27487245c53.png",
}]
}]
}],
"message": "data Found",
"status": "success"
}
これは私の
render
画像を表示する方法:
import React, { Component } from 'react';
export default class extends Component {
state = {
showModal: false,
caption: '',
modalSrc: '',
ioImageListing: [],
// ...rest of the state
};
componentDidMount() {
this.getAllProjectRequirementImageList();
}
getAllProjectRequirementImageList = () => {
axios.get(this.state.apiUrl+'/api/v1/visitRequirement/getAllByProjectId', {
params: { projectId: this.state.projectId }
}).then((response) => {
console.log("get with list ImageData",response.data.data);
this.setState({ ioImageListing: response.data.data });
}).catch((error)=>{ console.log("error",error); this.setState({ ioImageListing: [] }); });
}
render() {
return (
<div>
<div style={{}}>
{this.state.ioImageListing.map((io, key) =>
<Grid container spacing={24}>
{io.visitRequirementList.map((pic, key) => [
<Grid style={{position: 'relative'}} item xs={3} key={key}>
<span key={key}>
<img
src={this.state.apiUrl + '/api/v1/visitImageRequirementInfo/getImageByImagePathId?imagePath=' + pic.imagePath}
onClick={() => {
this.setState({
showModal: true,
caption: `${pic.imageName}`,
slideIndex: `${io.visitRequirementList.length}`,
modalSrc: `${this.state.apiUrl}/api/v1/visitImageRequirementInfo/getImageByImagePathId?imagePath=${pic.imagePath}`,
count: `${key}`
});
}}
/>
</span>
</Grid>
])}
</Grid>
)}
</div>
<div id="myModal" className="modal" style={{display: this.state.showModal ? 'block' : 'none'}}>
<div>
<span className="close" onClick={() => this.setState({showModal: false})}>×</span>
<div className="mySlides"><img className="modal-content" id="img01" src={this.state.modalSrc}/>
</div>
<a className="prev" onClick={() => {
this.plusSlides(-1)
}}>❮</a>
<a className="next" onClick={() => {
this.plusSlides(1)
}}>❯</a>
</div>
</div>
</div>
);
}
}
そして、これは私がスライダーを表示するために書いた関数です:
plusSlides = (n) => {
var slideIndex=parseFloat(this.state.count);
slideIndex=slideIndex+n
this.setState({ count: slideIndex });
this.showSlides(slideIndex, n);
}
showSlides(slideIndex,n) {
var i;
var slides = document.getElementsByClassName("mySlides");
if (n > slides.length) {slideIndex = 1}
if (n < 1) {slideIndex = slides.length}
for (i = 1; i < slides.length; i++) {
slides[i].style.display = "none";
}
slides[slideIndex-1].style.display = "block";
}
画像モーダルが開いたら、次と前のボタンをクリックするとスライドになります。私は何を間違っていますか?
回答 2 件
画像を配列に保存する必要があります。これらの画像を状態に保存してから、「mySlides」内のimgを次のように変更します。
/** -- snip -- **/ // Inside of "mySlides" div <img className="modal-content" id="img01" src={this.state.images[this.state.count]} />
関連記事
- react-simple-file-uploadを使用して画像を表示するのに問題がある
- 添付された画像のように、CSSを使用してマージするには垂直テキストと水平テキストが必要です
- Opencvを使用してイメージをロードし、それをUnityに(C ++ dllを介して)渡すにはどうすればよいですか?
- reactJSを使用して動的配列リストを表示する
- require()を使用してReactjsに画像をインポートできません
- AJAXとモーダルを使用してPHPからMySQLレコードを更新する
- Reactjsのデータベースから取得した画像パスを使用して画像を表示する方法
- 削除ボタンをクリックしてもReactjsテーブルの行が削除されない
- PHPを使用して画像にテキストを追加する方法
関連した質問
- Uberはスクロール矢印付きのタイプHorizontalScrollSpyを食べます
- Webpack DevServerが遅すぎますか、それとも何か問題がありますか?
- カスタムデータベースのクエリ(Mongodb)
- React-Redux:インポート試行エラー: '/ components/Score'にデフォルトのエクスポートが含まれていません( 'Score'としてインポートされました)
- divターゲットにアクセスして、reactでリストグループアイテムのスタイルを切り替える方法は?
- React Nativeエラー失敗したプロップタイプ:タイプ `array`の無効なプロップ` children`が `Overlay`に提供されました。
- svg要素の幅と高さを制御する方法
- 別のページにあるボタンの値を呼び出すにはどうすればよいですか?
- jsonから特定のコンテンツをレンダリングする
まず第一に、あなたはReactを正しい方法で使用していません。関数
showSlides
DOM操作を直接使用します。 DOMを直接操作するのではなく、常に更新してください。state
希望の値に調整し、ReactにDOMを処理させます。そうは言っても、スライダーを更新するだけで、スライダーがどのように反応的に機能するかを説明しましょう。
state
。これまでのところ、モーダルを機能させることができました。スライダーロジックは次のようになります(コードサンドボックスリンク):imageListDataはリストのリストです。わかりやすくするために、外側のリストを次のように参照します。
section
1-画像をクリックしたら、次のデータで状態を更新します。
2-クリックすると
Next
またはPrevious
ボタンをクリックすると、手順1で説明した状態のみが更新され、スライダーが機能します。考慮すべき唯一のことは、状態を正しい値で更新するロジックです。コメントで説明しようと思います。すべてのロジックがありますplusSlides
関数。お役に立てば幸いです。疑問があれば教えてください。作業コードはリンクから入手できます