问题标签 [preact]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
117 浏览

preact - 如何将 preact-cli 生成的应用程序挂载到自定义 div id?

我正在尝试将生成的应用程序安装preact-cli到自定义div id='root'似乎没有此类功能的配置。

0 投票
1 回答
700 浏览

javascript - Preact.js - 如何像 React.js 一样启动自动重新运行服务器

我想像 React 一样使用开发服务器npm start。但是,使用 Preact 时,当我使用相同的命令时,它会打开一个静态服务器,并且每次我想在我的项目中看到一些变化时,我都必须手动重新启动它。

我的package.json

相关链接:

https://preactjs.com/ https://github.com/developit/preact

0 投票
2 回答
845 浏览

javascript - Preact Router 在异步路由解决之前不会渲染

我有一个应用程序,它是服务器端渲染的,然后在客户端渲染以添加功能,但是,虽然第一次有意义的绘画的时间大约是 1000 毫秒,但一旦客户端脚本下载,页面就会变成白色,几秒钟后它再次呈现(客户端)。

经过一番调试,我意识到这是因为我正在这样做:

应用程序在哪里:

现在的问题是,html 是从服务器发送的,然后呈现。但是一旦执行了客户端脚本,<div id="app"></div>就会刷新,因为AsyncRoute尚未加载,这意味着没有要渲染的内容,因此页面变白。AsyncRoute加载后, <div id="app"></div>finally 有内容,因此页面被重新渲染。

我的问题是,在解决所有动态导入之前,如何才能使路由器或应用程序不会在客户端(上图)上呈现?

注意:我不能简单地这样做:

因为当我添加更多组件时,我将无法分辨要导入哪些路径,因此AsyncRoute组件

0 投票
2 回答
1411 浏览

javascript - 在生产环境中构建 webpack 时遇到问题

我正在做一个由 preact-cli 发起的项目。

我有一个捆绑我的应用程序的构建脚本。webpack 配置已经在 preact-cli 中全局定义,但我可以从 preact.config.js 修改它。

我检查了 preact-cli 中只有一个入口点,目前还可以。

捆

并且存在一个 CommonsChunkPlugin。它有这个配置:

CommonsChunkPlugin

如果我使用此配置正常构建应用程序。我得到一个很大的捆绑文件。

所以我开始添加我自己的 CommonsChunkPlugin。

Preact 提供了一种修改 webpack 配置的方法。这是哪个

我的 preact.config.js 是:

此配置为我提供了 rom bundle.js 相隔 5 块的所有文件。清单文件包含预期的 webpack 的引导文件。我运行应用程序,但在浏览器中出现此错误:

所以,我发现 manifest.js 文件比 bundle.js 加载晚,并且所有脚本文件都有属性“defer”。webpackJsonp 定义存在于 manifest.js 文件中。

我尝试了 3 件事,在此之前我检查了 preact-cli 中已经存在的“ScriptExtHtmlWebpackPlugin”。它是这个:

ScriptHTMLWebpackPlugin

我尝试过的事情:

  1. 将“ScriptExtHtmlWebpackPlugin”的默认属性更改为异步。这样我可以确保首先执行最小的文件,因为它将首先下载。在我的 preact.config.js 文件中添加任何插件之前,我编写了这段代码:

    现在我得到了错误:

    脚本文件加载到 build 文件夹的 index.html 中,如下所示:

    /li>
  2. 让属性仍然是'defer',但是改变加载文件的顺序,希望manifest.js比bundle.js更早加载。所以我在'HtmlWebpackPlugin'中编写了这个配置。

    现在我得到了错误:

    build 文件夹的 index.html 文件按以下顺序加载脚本:

    注意:在上述两种方法中,我的代码都不会影响 bundle.js 文件位置的任一属性。

  3. 通过preact-cli构建后,手动改变加载脚本的顺序,所以我把manifest.js放在bundle.js上面。所以它看起来像这样:

    我收到了这个错误:

    /li>

现在我没有选择了,我需要帮助。

0 投票
0 回答
234 浏览

javascript - Chai.js - 如何测试 JSX 组件是否具有特定的样式属性?

问题:

我使用 preact.js lib 创建了一个通用按钮组件。我还创建了一个让按钮居中或左对齐的道具:

  • button.js

    /li>

在我的睾丸套装中,我正在考虑一种方法来检查按钮组件是否居中。但我不想比较整个组件本身,因为测试可能会因为属性align: center或其他原因而中断align: left

  • button.test.js

    /li>

所以我的问题是:如何检查组件是否具有特定样式align: centeralign: left使用 chai.js 断言 api?

0 投票
1 回答
341 浏览

reactjs - 与 preact 别名时,create-react-app 在测试中找不到反应

我用“create-react-app”创建了一个项目。我已经通过弹出它并在 webpack 配置中使用别名将 preact 添加到项目中。

这在代码中有效,我能够呈现应用程序。但是,在测试中我收到以下错误

为什么找不到模块?除了别名之外,我们还有什么需要添加到配置中的吗?

0 投票
2 回答
4360 浏览

typescript - 如何在 typescript tsx 代码中扩展 jsx 元素的属性?

测试.tsx

产量

所以我在 JSX 部分上方的 test.tsx 中添加:

但没有任何效果。唔?

如何在本地向我想要使用的 JSX 代码添加属性?

我知道我可以粗暴地破解导入的类型文件,但我想知道是否有本地方法。

编辑: 除了 onerror 属性(即 preact.d.ts 中“错误地”缺失)之外,我通常想知道如何将临时属性添加到内在元素甚至我自己的元素。奇怪的是,打字稿从不抱怨我可能也会切换的“data-*”属性(无论如何都想成为一个不错的 html5 开发人员)。但是关于扩展接口 HTMLAttributes 的问题仍然对我开放。

0 投票
1 回答
619 浏览

reactjs - Preact 和 React 渲染无状态组件的区别

我正在使用 Preact,因为我有一个有大小限制的项目。我创建了两个 Playground,一个使用 Preact,一个使用 React。

只需在搜索字段中输入,注意 Preact 和 React 的更新方式有何不同。React 在 DOM 节点上重新渲染,Preact 添加到它。

我希望 Preact 表现得像 React。请帮忙

这是有问题的代码,游乐场可以看到下面的不同行为


这是 React 的游乐场:

https://stackblitz.com/edit/react-yey8js?file=index.js

这是 CodePen 的操场:

https://codepen.io/babakness/pen/oEXjPz?editors=1010

0 投票
1 回答
518 浏览

reactjs - 如何在 preact-material-components 中使用 Select

我在 PWA 上使用preact-material-components 。

我想添加一个选择菜单,所以我可以这样做:

进而

但是选择菜单看起来一点也不好看,我可以使用开发工具看到正在导入样式,但看起来 CSS 有问题,我是 React 新手,所以我想知道你对这段代码的看法.

PWA 选择菜单

0 投票
1 回答
176 浏览

react-router-v4 - React-Router 嵌套路由名称

我想在 react-router v4 中实现这种路由。

它不起作用,<Switch>因为它首先匹配/auth并渲染关联的组件。因此,当我单击链接转到login page例如它呈现的Auth Component而不是Login Component.

如何使用 react-router 实现该行为?我尝试了嵌套路由,但如果我采用与以前相同的示例,它将呈现Auth Component + Login Component.

谢谢。