首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用React路由器与Preact

如何使用React路由器与Preact
EN

Stack Overflow用户
提问于 2016-05-18 09:14:39
回答 4查看 11.5K关注 0票数 13

我使用Preact作为我的视图框架(由于Facebook问题,不能使用React )。我需要使用Reactive路由器来进行位置路由,因为它比同一个团队构建的Preact路由器具有更大的灵活性。

我设法让React路由器接受Preact来代替React,但是,我不能让它匹配位置。我不确定这是兼容性问题,还是配置问题。我试过只使用一对路由( App和Account ),但它仍然不能与简化的设置一起工作。

问:,有人看到我是不是做错什么了吗?

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

main.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
};
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-12 00:43:04

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

预紧和预紧

预演是React的最小版本,仅重3Kb。它实现了React的API的一个子集,这里和那里有一些小的区别。它还附带了一个助手库预演-比较,它通过填充缺少的部分和修补API之间的差异来提供与React的兼容性。

反应路由器

反应路由器是一个路由器库,旨在与React一起工作。但是,您也可以使用preact-compat使它与Preact一起工作。

成立前-公司

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i --save preact-compat

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

webpack配置实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    // ...
    resolve: {
        alias: {
            'react': 'preact-compat',
            'react-dom': 'preact-compat'
        }
    }
    // ...
}

然后,您可以使用React组件作为-is。他们不会知道他们是被Preact i.s.o.渲染的。反应。看看这个预-比较-例子

兼容性问题

请记住,当您使用Preact Compat时,您正在承担风险。杰森是个非常聪明的人,但他的图书馆只有Facebook提供的图书馆的一小部分,所以肯定会有一些不同。使用不太知名的React特性的组件可能无法正常工作。如果您遇到这样的问题,请向preact compat问题跟踪器报告(以GitHub回购的形式进行最少的复制),以帮助他进行改进。

过去有一些这样的问题阻止了React路由器无法正确地使用Preact,但是它们已经被修复了,现在您应该能够很好地使用这两个问题了。

预先的小提琴+反应-路由器

看看这个JS Fiddle作为一个有用的例子。

票数 16
EN

Stack Overflow用户

发布于 2016-08-29 21:46:21

更新的答案是现在有一个前置路由器包:https://www.npmjs.com/package/preact-router

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Router from 'preact-router';
import { h } from 'preact';

const Main = () => (
  <Router>
    <Home path="/" />
    <About path="/about" />
    <Search path="/search/:query" />
  </Router>
);

render(<Main />, document.body);
票数 3
EN

Stack Overflow用户

发布于 2016-05-19 07:22:44

发现的问题,是两个问题与Preact的兼容性反应:

上下文处理不正确:

https://github.com/developit/preact/issues/156

props.children未正确处理:

https://github.com/developit/preact-compat/issues/47#issuecomment-220128365

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37306197

复制
相关文章
C# 判断文件/文件夹 是否存在
1、判断文件夹是否存在 //spath:文件夹路径名 using System.IO; if (Directory.Exists(spath)) { } else { DirectoryInfo directoryInfo = new DirectoryInfo(spath); directoryInfo.Create(); } 2、判断文件是否存在 // filePath 文件路径名 if (!File.Exists(filePath)) { //Messa
用户10325771
2023/03/01
1.6K0
java实现文件压缩,文件夹压缩,以及文件和文件夹的混合压缩
package util; /** * @program: transformation * @description: * @author: cuixy * @create: 2019-07-26 14:30 **/ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipE
崔笑颜
2020/06/08
2.8K0
Java 将文件夹打成压缩包 zip
  今天在做批量下载的时候,用到了就写一写吧,一般多文件下载通常都是通过压缩包下载的
彼岸舞
2020/12/02
4.8K0
python移动文件,将一个文件夹里面的文件移动到另一个文件夹
python移动文件,将一个文件夹里面的文件移动到另一个文件夹 import shutil import os def remove_file(old_path, new_path): print(old_path) print(new_path) filelist = os.listdir(old_path) #列出该目录下的所有文件,listdir返回的文件列表是不包含路径的。 print(filelist) for file in filelist:
青阳
2021/04/02
29.2K0
linux压缩文件夹,cksum比较两个文件或文件夹等是否一样
校验码就不管是什么了,估计是一个类似主键的唯一id吧!如果有跟这个文件一样的文件会是打印出相同的校验码,那么这两个文件就是同一个文件了。
全栈程序员站长
2022/08/05
2.8K0
linux压缩文件夹,cksum比较两个文件或文件夹等是否一样
【Auto.js】[zip压缩] 将文件夹压缩成zip包
将一个文件夹压缩成一个zip包,可应用于项目文件夹打包成zip, 文件夹过滤了目录中的空文件夹,因此,空文件夹不会被打包到zip包中. 由于本人JS知识有限,JAVA也不懂, 导致该函数, 打包大型文件时, 非常慢,性能低下. 如果@admin 有好的方法, 可以发一下, 谢谢.
红目香薰
2022/11/29
1.9K0
C#利用SharpZipLib解压或压缩文件夹实例操作
最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享。 这里主要解决文件夹包含文件夹的解压缩问题。 )下载SharpZipLib.dll,在http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx中有最新免费版本,“Assemblies for .NET 1.1, .NET 2.0, .NET CF 1.0, .NET CF 2.0: Download [297 KB] ”点击Download可以下载,解压后里边有好多文件夹
跟着阿笨一起玩NET
2018/09/19
3.1K0
golang 判断文件/路径是否存在、是否为文件夹/文件
golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:
IT工作者
2022/07/01
2.9K0
python 判断文件、文件夹是否存在
>>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d:/assist/getTeacherList.py') True >>> os.path.isfile('d:/assist') False >>> os.path.isfile('d:/assist/getTeacherList.py') True >>> os.makedirs('d:/assist/set') >>> os.path.exists('d:/
艳艳代码杂货店
2021/11/01
2.3K0
python 判断文件、文件夹是否存在
>>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d:/assist/getTeacherList.py') True >>> os.path.isfile('d:/assist') False >>> os.path.isfile('d:/assist/getTeacherList.py') True >>> os.makedirs('d:/assist/set') >>> os.path.exists('d:/a
代码伴一生
2021/11/01
2.1K0
python 压缩文件夹 脚本
def backupToZip(folder): # Backup the entire contents of "folder" into a zip file.
用户5760343
2022/05/13
1.5K0
ASP.NET Core 将文件夹内容输出为压缩包文件方法
本文主要是告诉大家一个省内存的方法,将整个文件夹的内容作为一个压缩包输出,但是实际上没有申请那么多的内存,也不需要升级创建一个压缩包文件。原理是通过逐个读文件然后按照压缩包格式输出
林德熙
2020/08/02
1.6K0
是否可以删除 WinSxS 文件夹
一个常见问题是,“是否可以删除 WinSxS 文件夹来重新获得磁盘空间?” 简短的答案是“否”。但是,可以使用 Windows 中内置的工具来减小 WinSxS 文件夹的大小。
Windows技术交流
2020/04/13
5.2K0
tar压缩和解压文件或文件夹
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124590.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/21
3.5K0
VBA 创建文件夹和判断文件夹是否存在!
Public Function 创建文件夹(ByVal 路径 As String, ByVal 文件夹名称 As String)
办公魔盒
2019/07/22
4.9K0
VBA 创建文件夹和判断文件夹是否存在!
ExcelVBA判断文件或文件夹是否存在
返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
哆哆Excel
2022/10/25
6.6K0
ExcelVBA判断文件或文件夹是否存在
golang判断文件或文件夹是否存在
golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断: 如果返回的错误为nil,说明文件或文件夹存在 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在 如果返回的错误为其它类型,则不确定是否在存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil {
李海彬
2018/03/19
5.7K0
tar压缩时排除特定文件和文件夹
一日一技是一个每天更新的栏目,力图做到让你每天用2分钟的时间掌握一个开发技巧。 ---- tar压缩文件的时候排除特定文件和文件夹: tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz . 注意末尾有一个点。
青南
2018/10/18
1.7K0
C#获取文件夹下的所有文件
 1、获得当前运行程序的路径 string rootPath = Directory.GetCurrentDirectory();   2、获得该文件夹下的文件,返回类型为FileInfo string path=@"X:\XXX\XX"; DirectoryInfo root = new DirectoryInfo(path); FileInfo[] files=root.GetFiles();   3、获得该文件夹下的子目录,返回类型为DirectoryInfo string path=
用户9127601
2021/11/01
6.3K0
Python实现批量压缩文件/文件夹——zipfile
zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的,
Python研究者
2021/08/30
2.4K0

相似问题

将文件移动到文件夹(C#)

22

C#将文件移动到文件夹

13

将压缩文件夹从移动到客户端

13

是否将文件移动到文件夹/分支中?

116

将多个文件夹移动到新文件夹并使用tar压缩该文件夹

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文