小编Pre*_*fix的帖子

使用服务器端渲染在 React PWA 中缓存应用程序外壳

因此,假设您有一个基于 React 的移动 Web 应用程序,它利用服务器端呈现的初始视图(出于速度 + SEO 原因)。没有“index.html”文件——索引文件在服务器端动态构建并在初始响应中返回。

现在假设您想向该应用程序添加 PWA 功能。你连接了一个 service worker 来缓存资产等。

PWA 的核心租户之一是它们提供离线体验。假设我们只想在 Service Worker 检测到用户离线时显示一个刷新页面,“您离线,单击此处刷新”。

谷歌提供的在线示例谈论使用 App Shell——一个静态 HTML 文件,它可以在初次访问时由服务工作者缓存,它将成为你的反应应用程序所在的“外壳”。此外壳与显示“离线”视图有关。

这如何与服务器端渲染一起工作,其中没有“shell”html 文件,并且每个路由都可能返回不同的 index.html 文件?

任何有关此功能的演示或示例?

reactjs service-worker server-side-rendering progressive-web-apps app-shell

6
推荐指数
1
解决办法
1603
查看次数

使用 CSSTransitionGroup 和 React-Router v6 动画路由转换

我开始使用 React-Router v6,并且遇到了动画路由转换的问题。

无论是反应路由器文档反应过渡组文档指定不符合新的V6 API兼容的方式。

主要原因似乎是移除了<Switch>组件。

在 react-router@v5 中,这有效:

import { Router, Route, Switch, useLocation } from 'react-router@v5'
import { TransitionGroup, CSSTransition } from 'react-transition-group'

function App() {
  const location = useLocation();

  return (
    <Router>
      <TransitionGroup>
        <CSSTransition key={location.key} classNames="fade" timeout={300}>
          <Switch location={location}>
            <Route path="/a" children={<A />} />
            <Route path="/b" children={<B />} />
          </Switch>
        </CSSTransition>
      </TransitionGroup>
    </Router>
  );
}
Run Code Online (Sandbox Code Playgroud)

...但是,在 react-router@v6 中,这不起作用:

function App() {
  const location = useLocation();

  return (
    <Router>
      <TransitionGroup>
        <CSSTransition key={location.key} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router react-transition-group

6
推荐指数
1
解决办法
1362
查看次数

react-router:如何在 onEnter 处理程序中获取先前的路由?

当用户在onEnter处理程序中点击新路线/路径时,我试图找到一种方法来读取之前的路线/路径。

我有一个像这样结构的 React 路由器:

    <Router history={history}>
      <div className="index">
        <Route
          path="/"
          component={ComposedAppComponent}
          onEnter={this.onEnterHandler.bind(this)}
        >
          <Route name="streamKey" path=":streamKey">
            <Route name="articleUri" path="(**)" />
          </Route>
        </Route>
      </div>
    </Router>
Run Code Online (Sandbox Code Playgroud)

函数 ,onEnterHandler看起来像这样:

  onEnterHandler(nextRouteState) {
    const { streamKey, splat } = nextRouteState.params;

    const nextPath = `/${streamKey}/${splat}`;
    const prevPath = // HOW DO I GET THE PREVIOUS PATH?
  }
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到一种方法来读取用户所在的先前路线路径……我需要在新路线和先前路线之间进行比较。任何关于如何解决这个问题的意见都非常感谢。:)

干杯!

reactjs react-router react-router-redux

4
推荐指数
1
解决办法
2万
查看次数

重复承诺,直到它没有被拒绝或达到超时

我仍然是一个Promise noob,我正试图弄清楚如何让我的Promise重演.

如果没有设置某个全局标志,则拒绝ES6.我需要它每500ms重试一次,直到:

  • 承诺回归决心,
  • 或者达到最大尝试次数(比方说10).

由于Promise是异步的,我真的不想使用setInterval()检查,因为我不认为它可以正常使用异步代码.一旦promise成功解决(或达到超时),我需要检查终止.

我正在使用ES6 + React + ES6 Promises(所以请不要使用Q或Bluebird特定的答案!)

http://jsfiddle.net/2k2kz9r9/8/

// CLASS
class Test extends React.Component {
    constructor() {
      this.state = {
        status: 'setting up..',
      }
    }
    componentDidMount() {
      // TODO: how do I get this to loop with a timeout?
      this.createSlot()
        .then((slot) => {
          this.setState({
            status: slot
          });
        })
        .catch((e) => {
          this.setState({
            status: e.message
          });
        })
    }
    createSlot() {
      return new Promise((resolve, reject) => {
        if (!this.checkIsReady()) {
          reject(new Error('Global isnt ready yet')); …
Run Code Online (Sandbox Code Playgroud)

javascript repeat promise ecmascript-6 es6-promise

4
推荐指数
1
解决办法
6391
查看次数

Supabase 客户端查询出现“未捕获错误:发现多个关系”

我正在构建一个多租户应用程序,并在添加指向同一个表的多个关系后遇到错误:

Uncaught Error: More than one relationship was found for teams and users
Run Code Online (Sandbox Code Playgroud)

执行此查询时:

const data = await supabaseClient.from('organizations')
.select(`
  *,
  teams(
    id,
    org_id,
    name,
    members:users(
      id,
      full_name,
      avatar_url
    )
  )
`);
Run Code Online (Sandbox Code Playgroud)

我有以下表结构(为简洁起见,省略了一些字段):

table users (
  id uuid PK
  full_name text
  email text
)

table organizations (
  id uuid PK
  ....
)

table organization_memberships (
  id uuid PK
  organization_id uuid FK
  user_id uuid FK
  role ENUM
)

table teams (
  id uuid PK
  name text PK
)

table team_memberships ( …
Run Code Online (Sandbox Code Playgroud)

postgresql relational-database supabase supabase-database

4
推荐指数
1
解决办法
2073
查看次数

事件回调中是否需要匿名函数?

目前,当我将一个匿名函数CONTAINING我的自定义方法调用传递给一个事件回调时,我的代码工作,但是当我尝试直接在回调中调用自定义方法时,我的代码工作... IE:

var that = this;

// THIS WORKS:
gt.pubads().addEventListener('slotRenderEnded', function(event) {
    that.onSlotRenderEnded(event);
});

// THIS DOES NOT. why? 
gt.pubads().addEventListener('slotRenderEnded', that.onSlotRenderEnded(event));
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么我的方法调用需要在匿名函数中包装才能工作.我希望能够缩短代码并直接调用自定义方法而不是通过匿名方法.

javascript

3
推荐指数
1
解决办法
202
查看次数

如何旋转<canvas>的一部分,而不是整个元素?

我正在尝试学习一些<canvas>API.我的任务是创建一个简单的模拟式时钟,工作时钟指针(秒,分钟和小时).

时钟框架,面部和指针都使用相同的画布元素绘制.我创建了drawScene()一个每秒运行一次的函数并重绘整个时钟.如果你想更深入地看一下代码,我会将它发布到本帖子底部链接的jsbin中.

目标是drawScene()调用drawClockFace()方法,该方法将当前秒/分钟/小时传递给基于传入时间(即drawSecondHand(currentSecond))绘制手的各个函数.

问题:

如何在不旋转整个画布的情况下旋转画布的各个组件(即我的时钟上的秒针)?我知道我需要根据当前秒数来计算从中心原点绘制线的位置.我只是不确定需要确定"在哪里"画线的宝石计算.

这就是我到目前为止的情况 - 请注意它并不是超级干净,因为我一直在使用它. http://codepen.io/tconroy/pen/BcEbf

javascript css html5 canvas rotation

2
推荐指数
1
解决办法
1689
查看次数

如何一起使用grunt-autoprefixer和grunt-sass?

我是崭露头角的工具和sass的新手,这是一次很棒的学习经历.:)我目前有grunt配置为在构建时连接/最小化我的SCSS.我想使用grunt-autoprefixer插件添加供应商前缀,但是我不完全确定如何将它集成到我现有的Gruntfile中.在下面的代码中,我已经开始实现它(请参阅注释掉的"TODO"部分),但如果有人能指出我正确的方向让它工作,那将非常感激:)

这是我目前的Gruntfile.js:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    sass: {
      options: {
        sourceMap: true
      },

      dist: {
        options: {
          outputStyle: 'compressed'
        },
        files: {
          'css/foundation.css': 'scss/foundation.scss'
        }
      }
    },

    copy: {
      scripts: {
        expand: true,
        cwd: 'bower_components/foundation/js/vendor/',
        src: '**',
        flatten: 'true',
        dest: 'js/vendor/'
      },

      iconfonts: {
        expand: true,
        cwd: 'bower_components/fontawesome/',
        src: ['**', '!**/less/**', '!**/css/**', '!bower.json'],
        dest: 'assets/fontawesome/'
      },

    },

    // TODO: setup autoprefixer
    // autoprefixer: {
    //   options: {
    //     // Task-specific options go here. …
Run Code Online (Sandbox Code Playgroud)

javascript sass gruntjs autoprefixer

2
推荐指数
1
解决办法
5904
查看次数

Webpack 2 ExtractTextPlugin CSS源图覆盖babel 6 JS源图

编辑:发布此问题后不久找到了解决方案.请参阅下面的我的答案


我有一个基于webpack 2的项目,它使用ExtractTextPlugin将SCSS/CSS拉出到一个单独的文件中.

另外,我在webpack(vendorapp)中定义了两个入口点,它们构建到我的JS包中.

出于某种原因,ExtractTextPlugin似乎打破了为应用程序包生成的源图app.js.map.如果我查看源图,它指向提取的CSS文件中的随机行,而不是JS.

查看源图文件本身,我只看到"sources"下面列出的CSS和SCSS文件(下面的简短示例):

{"version":3,"sources":["webpack:///webpack:///~/icon-font/package/styles/ficon.css","webpack:///webpack:///~/styles/package/styles/_imports.scss","webpack:///webpack:///~/styles/package/styles/includes/_variables.scss","webpack:///webpack:///~/styles/package/styles/includes/_mixins-utilities.scss", .....
Run Code Online (Sandbox Code Playgroud)

但是,如果我ExtractTextPlugin在webpack配置中注释掉,我会在源代码中列出JS文件:

{"version":3,"sources":["webpack:///app-552b3935c142f5001484.js","webpack:///./src/lib/Globals.js","webpack:///./src/actions/AdActions.js", ....
Run Code Online (Sandbox Code Playgroud)

所以不确定这里发生了什么......看起来有点像ExtractTextPlugin破坏或覆盖应用程序包的源图?

以下是我在webpack配置中定义的所有相关插件的方法:

{
  entry: {
    vendors: [
      'react',
      'react-dom',
      'react-redux',
    ],
    app: path.resolve(__dirname, './../src/client.js'),
  },
  output: {
    path: path.resolve(__dirname, './../dist/assets/'),
    filename: '[name]-[chunkhash].js',
    sourceMapFilename: '[name]-[chunkhash].js.map',
  },
  cache: false,
  devtool: 'source-map',
  module: {
    rules: [
      {
        test: /\.(scss|sass|css)$/,
        loader: ExtractTextPlugin.extract({
          loader: [
            'css?sourceMap',
            'postcss-loader',
            'sass?sourceMap'
          ],
        }),
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: [path.join(__dirname, '../src')], …
Run Code Online (Sandbox Code Playgroud)

uglifyjs source-maps webpack webpack-2 extract-text-plugin

2
推荐指数
1
解决办法
1256
查看次数

如何在ActionScript 3.0中使用oAuth?

我遇到了ActionScript 3.0的oAuth库.http://code.google.com/p/oauth-as3/

它似乎拥有你需要做的所有oAuth,但我无法做出正面或反面.我以前从未使用oAuth(或任何身份验证..),我不确定如何使用它.我找不到这个特定库的任何示例,或者任何关于oAuth和AS3的一般示例.

有人会介意我(或指导我一个教程)关于如何使用oAuth与Web API进行交互吗?具体来说,我正在寻找与Twitter交互的ActionScript 3.0.

任何帮助深表感谢!

air twitter oauth actionscript-3

1
推荐指数
1
解决办法
3444
查看次数

jQuery将选中的复选框存储到数组中

背景

我有一个复选框的表格,按名称分组,每个复选框包含一个时间值.HTML的一个例子:

<td><input type="checkbox" name="tuesday[]" value="10am"></td>
<td><input type="checkbox" name="tuesday[]" value="11am"></td>
<td><input type="checkbox" name="tuesday[]" value="12pm"></td>
<td><input type="checkbox" name="tuesday[]" value="1pm"></td>
<td><input type="checkbox" name="tuesday[]" value="2pm"></td>
<td><input type="checkbox" name="tuesday[]" value="3pm"></td>
<td><input type="checkbox" name="tuesday[]" value="4pm"></td>
<td><input type="checkbox" name="tuesday[]" value="5pm"></td>
<td><input type="checkbox" name="tuesday[]" value="6pm"></td>
<td><input type="checkbox" name="tuesday[]" value="7pm"></td>
Run Code Online (Sandbox Code Playgroud)

提交表单时,将按照POST我希望的方式输入值; 所有检查的时间都在tuesday[]数组中.

问题

我想用一些客户端验证jQuery.我想检查是否至少选中了一个复选框.

我已经尝试将它存储到var中,如下所示:

var availTuesday  = $("input:checkbox[name='tuesday']:checked");
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时console.log(availTuesday);,没有显示任何内容(无论是否检查某些内容).我也试过了console.log(availTuesday.serialize());

题:

我怎么能检索的用户选定值tuesday[]复选框组,以及为其他日期(wednesday[],thursday[],等)?

谢谢.

html javascript checkbox jquery

1
推荐指数
1
解决办法
4919
查看次数

基本/高效JavaScript中的原型继承?

所以我目前有以下代码片段.我正在尝试创建一个Cylon包含模型属性和原型attack()方法的类.我正在创建一个HumanSkin继承自的类Cylon,并且还添加了自己的原型infiltrate()方法.

function Cylon(model){
  this.model = model;
}

Cylon.prototype.attack = function(){
    return("Destroy all humans!");
}

function HumanSkin(){}
HumanSkin.prototype = new Cylon();
HumanSkin.prototype.infiltrate = function(){
  return("Infiltrate the colonies");
}

cylon = new Cylon("raider");
caprica = new HumanSkin(6);
Run Code Online (Sandbox Code Playgroud)

我的问题是这个 - 为什么要console.log(caprica.model);回来Undefined?如何在JS中轻松获得完全继承(最好使用封装)?

javascript prototypal-inheritance

1
推荐指数
1
解决办法
55
查看次数

检查var是否匹配数组

首先我知道这是一个重复的问题,在这里经常被问到,但是我已经仔细研究了这些答案,但仍然无法弄清楚我的代码有什么问题.我对PHP很新,我99%肯定这是一个非常容易/新手的事情,这就是为什么它令我感到沮丧.

这是代码:

    $validProgram = 0;
$validProgramCodes = array('ITFZ', 'ITFC', 'ITFP', 'ITFE', 'ITFL', 'ITFS',
                           'ITFF', 'ITFM', 'ITFT', 'IEME', 'ISMK', 'IPKT');

if ( isset( $_GET[ 'category' ] ) && isset( $_GET[ 'subcategory' ] )
    && $_GET[ 'category' ] != '' && $_GET[ 'subcategory' ] != '' )
{
    $selectedSchool = $_GET[ 'category' ];
    $selectedProgram = $_GET[ 'subcategory' ];
    $selectedSchool = prepString( $selectedSchool );
    $selectedProgram = prepString( $selectedProgram );

    foreach ( $validProgramCodes as $temp )
    {
        if ( $temp == $selectedProgram )
        { …
Run Code Online (Sandbox Code Playgroud)

php arrays validation

0
推荐指数
1
解决办法
108
查看次数