React+Laravel:Nivo Slider 无法与基于 React Router 的导航一起正常工作
React+Laravel: Nivo Slider does not works properly with React Router based navigation
我正在使用 React 和 Laravel 创建一个应用程序。我被导航部分困住了。我正在 index.blade.php 文件中加载 main.js 文件(包含 nivo-slider 代码)。
<body class="home home-4">
<!-- React App Container -->
<div class="all">
<div id="app"></div>
</div>
<!-- App JS -->
<script src="{{URL::asset('js/app.js')}}" ></script>
<!-- Vendor JS -->
<script src="{{URL::asset('/libs/jquery/jquery.js')}}"></script>
<script src="{{URL::asset('/libs/bootstrap/js/bootstrap.js')}}"></script>
<script src="{{URL::asset('/libs/jquery.countdown/jquery.countdown.js')}}"></script>
<script src="{{URL::asset('/libs/nivo-slider/js/jquery.nivo.slider.js')}}"></script>
<script src="{{URL::asset('/libs/owl.carousel/owl.carousel.min.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/tmpl.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/jquery.dependClass-0.1.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/draggable-0.1.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/jquery.slider.js')}}"></script>
<script src="{{URL::asset('/libs/elevatezoom/jquery.elevatezoom.js')}}"></script>
<!-- Template JS -->
<script src="{{URL::asset('js/main.js')}}"></script>
</body>
以下是我的包含 react-router 的应用程序组件。
var React = require('react');
var ReactDOM = require('react-dom');
const Router = require('react-router-dom').BrowserRouter;
const Route = require('react-router-dom').Route;
const Switch = require('react-router-dom').Switch;
// var Nav = require('./Nav');
var Home = require('./components/Home');
var About = require('./components/About');
var Contact = require('./components/Contact');
ReactDOM.render(
<Router>
<div className="container">
<Route path="/" exact component={Home}></Route>
<Route path="/home" component={Home}></Route>
<Route path="/about" component={About}></Route>
<Route path="/contact" component={Contact}></Route>
</div>
</Router>, document.getElementById('app'));
主页组件上的导航有问题。首次加载应用程序时,它会正确呈现 Nivo Slider。但是,当我单击任何导航 link 并导航回主页时,Nivo Slider 会中断。
主页组件:
........ // Some code here
class Home extends React.Component {
render() {
return(
<div>
<Header />
<div id="content" className="site-content">
<div className="section slideshow">
<div className="container">
<div className="tiva-slideshow-wrapper">
<div id="tiva-slideshow" className="nivoSlider">
<Link to="#">
<img className="img-responsive" src="img/slideshow/home4-slideshow-1.jpg" alt="Slideshow Image" />
</Link>
<Link to="#">
<img className="img-responsive" src="img/slideshow/home4-slideshow-2.jpg" alt="Slideshow Image" />
</Link>
<Link to="#">
<img className="img-responsive" src="img/slideshow/home4-slideshow-3.jpg" alt="Slideshow Image" />
</Link>
</div>
</div>
</div>
</div>
........... // More Code to go
根据我的理解,不知何故它无法加载 main.js 由于滑块行为不正常。
首次加载的滑块部分:
<div class="section slideshow">
<div class="container">
<div class="tiva-slideshow-wrapper">
<div id="tiva-slideshow" class="nivoSlider">
<a href="/" class="nivo-imageLink" style="display: block;">
<img class="img-responsive" src="img/slideshow/home4-slideshow-1.jpg" alt="Slideshow Image" style="width: 1540px; visibility: hidden;">
</a>
<a href="/" class="nivo-imageLink" style="display: none;">
<img class="img-responsive" src="img/slideshow/home4-slideshow-2.jpg" alt="Slideshow Image" style="width: 1540px; visibility: hidden;">
</a>
<a href="/" class="nivo-imageLink" style="display: none;">
<img class="img-responsive" src="img/slideshow/home4-slideshow-3.jpg" alt="Slideshow Image" style="width: 1540px; visibility: hidden;">
</a>
<img class="nivo-main-image" src="img/slideshow/home4-slideshow-1.jpg" style="display: inline; width: 1540px; height: 686px;">
<div class="nivo-caption" style="display: none;"></div>
<div class="nivo-directionNav">
<a class="nivo-prevNav">Prev</a>
<a class="nivo-nextNav">Next</a>
</div>
<!-- Some of the nivo slider code goes here -->
<div class="nivo-controlNav">
<a class="nivo-control active" rel="0">1</a>
<a class="nivo-control" rel="1">2</a>
<a class="nivo-control" rel="2">3</a>
</div>
</div>
</div>
</div>
导航后的滑块部分:
<div class="section slideshow">
<div class="container">
<div class="tiva-slideshow-wrapper">
<div id="tiva-slideshow" class="nivoSlider">
<a href="/">
<img class="img-responsive" src="img/slideshow/home4-slideshow-1.jpg" alt="Slideshow Image">
</a>
<a href="/">
<img class="img-responsive" src="img/slideshow/home4-slideshow-2.jpg" alt="Slideshow Image">
</a>
<a href="/">
<img class="img-responsive" src="img/slideshow/home4-slideshow-3.jpg" alt="Slideshow Image">
</a>
</div>
</div>
</div>
</div>
添加loadjs包并在componentDidMount()中调用,在路由后加载库。请查看以下代码片段以供参考。
componentDidMount() {
loadjs('js/main.js', function() {
console.log('Test');
});
}
我正在使用 React 和 Laravel 创建一个应用程序。我被导航部分困住了。我正在 index.blade.php 文件中加载 main.js 文件(包含 nivo-slider 代码)。
<body class="home home-4">
<!-- React App Container -->
<div class="all">
<div id="app"></div>
</div>
<!-- App JS -->
<script src="{{URL::asset('js/app.js')}}" ></script>
<!-- Vendor JS -->
<script src="{{URL::asset('/libs/jquery/jquery.js')}}"></script>
<script src="{{URL::asset('/libs/bootstrap/js/bootstrap.js')}}"></script>
<script src="{{URL::asset('/libs/jquery.countdown/jquery.countdown.js')}}"></script>
<script src="{{URL::asset('/libs/nivo-slider/js/jquery.nivo.slider.js')}}"></script>
<script src="{{URL::asset('/libs/owl.carousel/owl.carousel.min.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/tmpl.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/jquery.dependClass-0.1.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/draggable-0.1.js')}}"></script>
<script src="{{URL::asset('/libs/slider-range/js/jquery.slider.js')}}"></script>
<script src="{{URL::asset('/libs/elevatezoom/jquery.elevatezoom.js')}}"></script>
<!-- Template JS -->
<script src="{{URL::asset('js/main.js')}}"></script>
</body>
以下是我的包含 react-router 的应用程序组件。
var React = require('react');
var ReactDOM = require('react-dom');
const Router = require('react-router-dom').BrowserRouter;
const Route = require('react-router-dom').Route;
const Switch = require('react-router-dom').Switch;
// var Nav = require('./Nav');
var Home = require('./components/Home');
var About = require('./components/About');
var Contact = require('./components/Contact');
ReactDOM.render(
<Router>
<div className="container">
<Route path="/" exact component={Home}></Route>
<Route path="/home" component={Home}></Route>
<Route path="/about" component={About}></Route>
<Route path="/contact" component={Contact}></Route>
</div>
</Router>, document.getElementById('app'));
主页组件上的导航有问题。首次加载应用程序时,它会正确呈现 Nivo Slider。但是,当我单击任何导航 link 并导航回主页时,Nivo Slider 会中断。
主页组件:
........ // Some code here
class Home extends React.Component {
render() {
return(
<div>
<Header />
<div id="content" className="site-content">
<div className="section slideshow">
<div className="container">
<div className="tiva-slideshow-wrapper">
<div id="tiva-slideshow" className="nivoSlider">
<Link to="#">
<img className="img-responsive" src="img/slideshow/home4-slideshow-1.jpg" alt="Slideshow Image" />
</Link>
<Link to="#">
<img className="img-responsive" src="img/slideshow/home4-slideshow-2.jpg" alt="Slideshow Image" />
</Link>
<Link to="#">
<img className="img-responsive" src="img/slideshow/home4-slideshow-3.jpg" alt="Slideshow Image" />
</Link>
</div>
</div>
</div>
</div>
........... // More Code to go
根据我的理解,不知何故它无法加载 main.js 由于滑块行为不正常。
首次加载的滑块部分:
<div class="section slideshow">
<div class="container">
<div class="tiva-slideshow-wrapper">
<div id="tiva-slideshow" class="nivoSlider">
<a href="/" class="nivo-imageLink" style="display: block;">
<img class="img-responsive" src="img/slideshow/home4-slideshow-1.jpg" alt="Slideshow Image" style="width: 1540px; visibility: hidden;">
</a>
<a href="/" class="nivo-imageLink" style="display: none;">
<img class="img-responsive" src="img/slideshow/home4-slideshow-2.jpg" alt="Slideshow Image" style="width: 1540px; visibility: hidden;">
</a>
<a href="/" class="nivo-imageLink" style="display: none;">
<img class="img-responsive" src="img/slideshow/home4-slideshow-3.jpg" alt="Slideshow Image" style="width: 1540px; visibility: hidden;">
</a>
<img class="nivo-main-image" src="img/slideshow/home4-slideshow-1.jpg" style="display: inline; width: 1540px; height: 686px;">
<div class="nivo-caption" style="display: none;"></div>
<div class="nivo-directionNav">
<a class="nivo-prevNav">Prev</a>
<a class="nivo-nextNav">Next</a>
</div>
<!-- Some of the nivo slider code goes here -->
<div class="nivo-controlNav">
<a class="nivo-control active" rel="0">1</a>
<a class="nivo-control" rel="1">2</a>
<a class="nivo-control" rel="2">3</a>
</div>
</div>
</div>
</div>
导航后的滑块部分:
<div class="section slideshow">
<div class="container">
<div class="tiva-slideshow-wrapper">
<div id="tiva-slideshow" class="nivoSlider">
<a href="/">
<img class="img-responsive" src="img/slideshow/home4-slideshow-1.jpg" alt="Slideshow Image">
</a>
<a href="/">
<img class="img-responsive" src="img/slideshow/home4-slideshow-2.jpg" alt="Slideshow Image">
</a>
<a href="/">
<img class="img-responsive" src="img/slideshow/home4-slideshow-3.jpg" alt="Slideshow Image">
</a>
</div>
</div>
</div>
</div>
添加loadjs包并在componentDidMount()中调用,在路由后加载库。请查看以下代码片段以供参考。
componentDidMount() {
loadjs('js/main.js', function() {
console.log('Test');
});
}