因此,假设您有一个基于 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
我开始使用 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) 当用户在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)
我似乎无法找到一种方法来读取用户所在的先前路线路径……我需要在新路线和先前路线之间进行比较。任何关于如何解决这个问题的意见都非常感谢。:)
干杯!
我仍然是一个Promise noob,我正试图弄清楚如何让我的Promise重演.
如果没有设置某个全局标志,则拒绝ES6.我需要它每500ms重试一次,直到:
由于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) 我正在构建一个多租户应用程序,并在添加指向同一个表的多个关系后遇到错误:
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) 目前,当我将一个匿名函数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)
我试图理解为什么我的方法调用需要在匿名函数中包装才能工作.我希望能够缩短代码并直接调用自定义方法而不是通过匿名方法.
我正在尝试学习一些<canvas>API.我的任务是创建一个简单的模拟式时钟,工作时钟指针(秒,分钟和小时).
时钟框架,面部和指针都使用相同的画布元素绘制.我创建了drawScene()一个每秒运行一次的函数并重绘整个时钟.如果你想更深入地看一下代码,我会将它发布到本帖子底部链接的jsbin中.
目标是drawScene()调用drawClockFace()方法,该方法将当前秒/分钟/小时传递给基于传入时间(即drawSecondHand(currentSecond))绘制手的各个函数.
问题:
如何在不旋转整个画布的情况下旋转画布的各个组件(即我的时钟上的秒针)?我知道我需要根据当前秒数来计算从中心原点绘制线的位置.我只是不确定需要确定"在哪里"画线的宝石计算.
这就是我到目前为止的情况 - 请注意它并不是超级干净,因为我一直在使用它. http://codepen.io/tconroy/pen/BcEbf
我是崭露头角的工具和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) 编辑:发布此问题后不久找到了解决方案.请参阅下面的我的答案
我有一个基于webpack 2的项目,它使用ExtractTextPlugin将SCSS/CSS拉出到一个单独的文件中.
另外,我在webpack(vendor和app)中定义了两个入口点,它们构建到我的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) 我遇到了ActionScript 3.0的oAuth库.http://code.google.com/p/oauth-as3/
它似乎拥有你需要做的所有oAuth,但我无法做出正面或反面.我以前从未使用oAuth(或任何身份验证..),我不确定如何使用它.我找不到这个特定库的任何示例,或者任何关于oAuth和AS3的一般示例.
有人会介意我(或指导我一个教程)关于如何使用oAuth与Web API进行交互吗?具体来说,我正在寻找与Twitter交互的ActionScript 3.0.
任何帮助深表感谢!
背景
我有一个复选框的表格,按名称分组,每个复选框包含一个时间值.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[],等)?
谢谢.
所以我目前有以下代码片段.我正在尝试创建一个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中轻松获得完全继承(最好使用封装)?
首先我知道这是一个重复的问题,在这里经常被问到,但是我已经仔细研究了这些答案,但仍然无法弄清楚我的代码有什么问题.我对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) javascript ×7
reactjs ×3
react-router ×2
air ×1
app-shell ×1
arrays ×1
autoprefixer ×1
canvas ×1
checkbox ×1
css ×1
ecmascript-6 ×1
es6-promise ×1
gruntjs ×1
html ×1
html5 ×1
jquery ×1
oauth ×1
php ×1
postgresql ×1
promise ×1
repeat ×1
rotation ×1
sass ×1
source-maps ×1
supabase ×1
twitter ×1
uglifyjs ×1
validation ×1
webpack ×1
webpack-2 ×1