gpt4 book ai didi

javascript - 如何在 Preact 中使用 React Router

转载 作者:可可西里 更新时间:2023-11-01 02:20:54 24 4
gpt4 key购买 nike

我正在使用 Preact 作为我的 View 框架(由于 Facebook IP 问题,不能使用 React)。我需要使用 React Router 进行位置路由,因为它比同一个团队构建的 Preact Router 更灵活。

我设法让 React Router 接受 Preact 代替 React,但是,我无法让它匹配位置。不知道是兼容性问题,还是配置问题。我试过只使用一对路由( App 和 Account ),但它仍然不适用于这种简化的设置。

问:有没有人看到我在这里做错了什么?

我得到的错误是:Location "/account/12345/"did not match any routes

ma​​in.js

import { h, render } from 'preact';
import { Router, browserHistory } from 'react-router';
import { Provider } from 'react-redux';

import createStore from './createStore';
import createRoutes from './createRoutes';

process.env.DEBUG && console.log('Hello, developer!');

const history = browserHistory;
const store = createStore( history );
const routes = createRoutes( store );

render((
<Provider store={ store } key="redux-provider">
<Router history={ history } createElement={ h } routes={ routes } />
</Provider>
), document.body );

createRoutes.js

import { h } from 'preact';
import { IndexRoute, Route } from 'react-router';

// App Component
import App from './components/app';

// Sub Components
import Account from './components/account';
import Conversation from './components/conversation';
import Dashboard from './components/dashboard';

// Error Components
import BadAccount from './components/bad-account';
import NotFound from './components/not-found';

// Routes
export default ()=> (
<Route path="/" component={App}>
{/* Get URL parameter */}
<Route path="account/:accountID" component={Account}>
{/* Index Route */}
<IndexRoute component={Dashboard} />
{/* Sub Routes ( Alphabetical Please ) */}
<Route path="chat" component={Conversation} />
{/* Catch-All Route */}
<Route path="*" component={NotFound} />
</Route>
{/* Handle Invalid URIs */}
<Route path="*" component={BadAccount} />
</Route>
);

createStore.js

import { applyMiddleware, combineReducers, compose, createStore } from 'redux';
import thunk from 'redux-thunk';
import { routerMiddleware } from 'react-router-redux';

import messages from './resources/messages/reducer';
import conversation from './resources/conversation/reducer';
import layout from './resources/layout/reducer';
import profile from './resources/profile/reducer';
import contract from './resources/contract/reducer';

/*const { devToolsExtension } = window;*/

export default history => {

// Sync dispatched route actions to the history
const reduxRouterMiddleware = routerMiddleware( history );

// Create single reducer from all modules
const rootReducer = combineReducers({
messages,
conversation,
layout,
profile,
contract
});

// List redux middleware to inject
const middleware = [
thunk,
reduxRouterMiddleware
];

// Compose the createStore function
const createComposedStore = compose(
applyMiddleware( ...middleware )/*, // Figure this out...
( process.env.DEBUG && devToolsExtension ) ? devToolsExtension() : f => f*/
)( createStore );

// Create the store
const store = createComposedStore( rootReducer );

// Hook up Redux Routing middleware
// reduxRouterMiddleware.listenForReplays(store);

// Return store
return store;
};

最佳答案

(OP 已经解决了他的问题,但这在 Google 中排名很高,对新手帮助不大,所以我想我会提供一些背景信息)

Preact 和 preact-compat

preact是 React 的最小版本,重量仅为 3Kb。它实现了 React 的 API 的一个子集,这里和那里有一些小的差异。它还带有一个帮助程序库,preact-compat ,它通过填充缺失部分和修补 API 差异来提供与 React 的兼容性。

react 路由器

react-router是一个设计用于 React 的路由器库。但您也可以使用 preact-compat 使其与 Preact 一起使用。

设置预兼容

npm i --save preact-compat

确保在 webpack/browserify 配置中为 reactreact-dom 设置了别名,或者编写一些代码来手动设置这些别名。

webpack 配置示例

{
// ...
resolve: {
alias: {
'react': 'preact-compat',
'react-dom': 'preact-compat'
}
}
// ...
}

然后你就可以按原样使用 React Components 了。他们不会知道他们是由 Preact is.o. 渲染的。 react 。看看这个preact-compat-example .

兼容性问题

请记住,当您使用 Preact Compat 时,您是在冒险。 Jason 是一个非常聪明的人,但他的图书馆的规模只是 Facebook 提供的图书馆的一小部分,因此肯定会有一些差异。使用鲜为人知的 React 功能的组件可能无法正常工作。如果遇到此类问题,请将其报告给 preact-compat issue tracker (以 GitHub 存储库的形式进行最小复制)帮助他改进它。

过去有一些此类问题会阻止 React-Router 与 Preact 一起正常工作,但这些问题已得到修复,您现在应该能够很好地一起使用两者。

Preact + React-Router 的 fiddle

看看this JS Fiddle一个工作示例。

关于javascript - 如何在 Preact 中使用 React Router,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com