我试图路由到一个组件在React从一个组件呈现在WordPress页面上.现在搜索Link
下面是从一个组件呈现在WordPress页面上的链接,我试图点击搜索时得到PageFetch
组件.但当我点击,我只看到浏览器中的url更改为/wordpress/search
,但它不会去任何地方。控制台中没有错误,我没有看到PageFetch
组件中的console.log
语句。
const HomePageFlightContainer = () => {
return (
<Router>
....
<div className="col-lg-3">
<Link to="/wordpress/search" className="theme-btn w-100 text-center margin-top-20px">
Search Now
</Link>
</div>
....
</Router>
);
}
字符串
这是我的react index.js
import HomePageFlightContainer from './HomePageFlightContainer';
import PageFetch from './PageFetch';
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const App = () => {
return (
<Router >
<Switch>
<Route path="/" component={HomePageFlightContainer} />
<Route path="/wordpress/search" component={PageFetch} />
</Switch>
</Router>
);
};
export default App;
ReactDOM.render(<HomePageFlightContainer />, document.getElementById('search-flights-container'));
型
下面是我的PageFetch组件(点击后我想去的地方)
import { useState, useEffect } from 'react';
import axios from 'axios';
const PageFetch = (slug) => {
const [pageContent, setPageContent] = useState('');
console.log("response content:::", page.content)
... //get wordpress page here through axios
});
}, []);
return (
<div>
<h1>Search Page</h1>
{loading ? (
<p>Loading...</p>
) : (
<div dangerouslySetInnerHTML={{ __html: pageContent }} />
)}
</div>
);
};
export default PageFetch;
型
我也遇到了,我将需要添加重写规则在.htaccess文件.所以我检查,我已经在.htaccess下面的内容.我也尝试注解# RewriteBase /wordpress/
行.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
型
并将AllowOverride None
更改为
<Directory />
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
型
如前所述here
我如何使React路由工作的WordPress?
编辑根据以下建议,我正在编辑以包含更多信息
我有一个WordPress的网站,加载了一个没有React的homepage.php,其中包括一个“立即搜索”按钮(代码如下),当点击是去结果页,我是diapplaying结果页使用React。直到现在一切都很好
<div class="col-lg-3">
<a
href="<?php echo get_permalink( get_page_by_path( 'flight-search-result' ) ); ?>"
class="theme-btn w-100 text-center margin-top-20px" onclick="FrontPage.setValuesForExtendedSearch()"
>Search Now</a
>
</div>
型
现在我想根据用户正在搜索的内容在这个“立即搜索”按钮下面显示一些来自外部API的信息。所以我想到了React解决方案,但“立即搜索”容器呈现为非React方式(如前所述),所以我改变了容器通过React渲染,但现在的问题是从这个React呈现的“立即搜索”转到搜索结果页面按钮被点击。这是当我研究React路由,也无头WordPress的,使所有这些工作。但有困难,如上述问题
1条答案
按热度按时间20jt8wwn1#
问题
React应用程序只需要一个路由器组件来为整个应用程序提供路由上下文。这里的问题是
HomePageFlightContainer
正在渲染另一个路由器,因此当按下“立即搜索”链接时,处理导航操作的是 * this * 路由器。URL被更新,任何路由 * this * 路由器正在呈现的内容将被更新。App
组件中的主路由器不会知道任何这些操作。解决方案
删除任何子组件中的所有无关路由器,以便
App
呈现唯一的路由器,并为整个应用程序提供单个路由上下文。字符串
Switch
中的路由也是按照呈现的顺序进行匹配的,因此请确保按照路径特异性的相反顺序对路由进行排序。换句话说,在呈现 * 更 * 特定的路径之前呈现 * 更 * 特定的路径。型
删除
ReactDOM.render(<HomePageFlightContainer />, document.getElementById('search-flights-container'));
。HomePageFlightContainer
作为App
的一部分渲染(* 例如ReactDOM.render(<App />, document.getElementById('root'));
*)。