我通常在Stack上发布代码相关的东西,但这更多的是关于社区的一般想法是什么的问题.
似乎有很多人主张使用Redux和React来管理数据/状态,但是在阅读和学习两者时,我遇到了一些看起来不太合适的东西.
在本页的底部:http://redux.js.org/docs/basics/UsageWithReact.html(传递商店)它建议使用React'Context'的"Magic".
一种选择是将其作为道具传递给每个容器组件.然而,它变得乏味,因为你必须通过表示组件连线存储,因为它们碰巧在组件树中深层渲染容器.
我们建议的选项是使用一个特殊的React Redux组件,该组件可以神奇地使商店可用于所有容器组件......
在React Context页面(https://facebook.github.io/react/docs/context.html)上面有一个警告:
上下文是一种先进的实验性功能.API可能会在将来的版本中发生变化.
然后在底部:
正如在编写清晰代码时最好避免使用全局变量一样,在大多数情况下应避免使用上下文...
不要使用上下文通过组件传递模型数据.明确地通过树线处理数据更容易理解......
Redux建议使用React'Context'功能,而不是store
通过'props' 将其传递给每个组件.虽然React建议相反.
此外,似乎Dan Abramov(Redux的创建者)现在为Facebook(React的创建者)工作,只是为了让我更加困惑.
我确信这是预期的行为array_column()
:
class myObj {
public $prop;
public function __construct(int $prop) {
$this->prop = $prop;
}
}
$objects = [
new myObj(7),
new myObj(3),
new myObj(8),
new myObj(0),
new myObj(2),
new myObj(6)
];
echo '<pre>';
print_r(array_column($objects, 'prop'));
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
返回:
Array (
[0] => 7
[1] => 3
[2] => 8
[3] => 2
[4] => 6
)
Run Code Online (Sandbox Code Playgroud)
的0
缺失.也许它在empty()
内部使用..?
为什么它不会返回有价值的值,0
并且false
可以是正常的有效对象属性值,并且array_column()
用于返回值..?
什么是最好的工作...?
我们正在将应用程序从“使用 Google 登录”移至“使用 Microsoft 登录”。它是一个 SPA,但查询 API 来获取数据。客户端全部使用 MSAL v2 (msal-browser.min.js) 运行,我们可以正常登录和退出。
当我们向服务器发送请求时,我们会发送 JWT ID 令牌。服务器是 NodeJS API。
我看不到任何具有“验证”方法的 Microsoft 服务器端 Node 库,我们可以使用该方法来验证来自客户端的 ID 令牌。
我们一直在查看@azure/msal-node
和@azure/msal-common
,但看不到任何可以提供 ID 令牌的内容,以验证令牌是否有效以及用户是否已登录。
如果用户未登录,我们希望从 API 返回“未经授权”。
对于 Google,这很容易,我们google-auth-library
这样使用:
const client = new OAuth2Client(googleClientId)
const ticket = await client.verifyIdToken({ idToken: googleIdToken, audience: googleClientId })
const payload = ticket.getPayload() // jwt payload
Run Code Online (Sandbox Code Playgroud)
我希望微软的同类产品很难找到,或者不是,我只是愚蠢地没有找到它。
是否有 Node 库提供了一种验证 MSAL ID 令牌的方法,该方法确认令牌有效并且用户已登录...?
我正在使用Webpack(在Windows环境中),我正在尝试使用less-loader
并extract-text-webpack-plugin
生成一个css文件.我有less
,webpack-core
而且webpack
也是我的node_modules
文件夹中.
在我的应用程序中我使用:
require('./index.less');
Run Code Online (Sandbox Code Playgroud)
我的Webpack配置:
const path = require('path');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
entry: [
'./app/index.jsx'
],
output: {
path: path.join(__dirname, '/public'),
filename: "js/app.js"
},
module: {
loaders: [{
test: /\.(js|jsx)$/,
include: path.join(__dirname, '/app'),
exclude: path.join(__dirname, '/node_modules'),
loader: 'babel-loader',
query: {
presets: ['es2015', 'react'],
plugins: ["transform-object-rest-spread"]
}
},{
test: /\.(css|less)$/,
loader: ExtractTextPlugin.extract("css-loader", "less-loader")
}]
},
plugins: [
new ExtractTextPlugin('css/app.css')
]
};
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这应该意味着当Webpack遇到我的index.less
文件时,它less-loader
首先使用生成CSS,然后 …
我经常在其他人的文档中看到类似的东西:
回调是可选的,如果省略则返回一个promise.
这就是我所拥有的:
export function doSomeAsync(options, callback) {
const useCallback = (callback && typeof callback == 'function');
const promise = new Promise((resolve, reject) => {
// --- do async stuff here ---
const check = (options.num === 1) ? true : false;
setTimeout(() => {
if (check) {
finish(true, "Number is 1");
} else {
finish(false, new Error("Number is not 1"));
}
}, 1000);
// ---------------------------
function finish(ok, rtn) {
if (useCallback) {
if (ok) {
callback(null, rtn);
} else …
Run Code Online (Sandbox Code Playgroud) 我正在使用Jest覆盖选项,我得到:
--------------------------|----------|----------|----------|----------|----------------|
File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
--------------------------|----------|----------|----------|----------|----------------|
progress-bar.js | 100 | 75 | 100 | 100 | 17 |
--------------------------|----------|----------|----------|----------|----------------|
Run Code Online (Sandbox Code Playgroud)
所以我有17条未覆盖的线,但我不知道如何掩盖它们.
进步,bar.js
import ProgressBar from 'progress'
import isNumber from 'lodash/isNumber'
import config from '../../config/global'
function progressBar (total) {
if (!isNumber(total)) throw new Error(`progressBar() 'total' arg is not a number.`)
const barCfg = config.progressBar
const tokens = `${barCfg.bar} ${barCfg.info}`
const options = {
width: barCfg.width,
total: total …
Run Code Online (Sandbox Code Playgroud) 如果我需要查看我使用的传入请求标头:req.headers
.
我需要查看响应中所有标头的列表.
res.headers
是undefined
.
我知道我可以设置响应头:res.header('', '')
.
如何查看响应标头..?
我有一个包含许多子节点的React(15.5.4)组件,其中一些是HTML元素,另一些是其他React组件.
我正在使用服务器渲染,并且需要在服务器和客户端上执行相同的操作.客户端将使用React的生产版本.
我需要遍历子项并识别特定类型的React组件.所以我的第一个想法是迭代使用React.Children.forEach()
并查找组件名称.
React.Children.forEach(this.props.children, child => {
console.log('name =', child.name)
})
Run Code Online (Sandbox Code Playgroud)
这似乎child.name
与child.displayName
不存在.
现在,child.type
存在,并且是一个字符串(对于HTML元素)"ul"
或者是一个函数(对于React组件).
当它是一个函数时,我可以使用lodash/get
这样const type = get(child, 'type.name', '')
来获取组件名称.但是,这似乎只在服务器上工作,而不是在客户端生产构建中,它返回一个字符串:"t"
.看起来开发构建使用我的组件名称作为函数,但生成构建将其重命名为t()
.所以我不能用child.type.name
.
我如何能:
我正在使用aws-sdk
NodeJS与DynamoDB表进行交互。这是我第一次看DynamoDB。
当使用类似getItem()
或的调用时updateItem()
,数据结构包括如下类型:
{
'a': { S: 'My string' }
}
Run Code Online (Sandbox Code Playgroud)
没有类型,有没有办法传递和接收这些对象?所以...
{
'a': 'My string'
}
Run Code Online (Sandbox Code Playgroud)
或者,已经编写的任何帮助程序功能都可以将对象与该格式相互转换。
const data = dbToObj({ 'a': { S: 'My string' } })
// { 'a': 'My string' }
Run Code Online (Sandbox Code Playgroud)
因此,我可以在填充调用参数时转换为它,而在接收数据时将其转换为它。
尝试避免访问我的数据,例如:
const myData = data.Item.something.M.somethinElse.M.qwerty.S
Run Code Online (Sandbox Code Playgroud)
我知道我可以自己写点东西,只是想知道是否有人知道已经可用的功能/选项可以做到这一点。我找不到。
我正在使用 Atom 1.14.2。
例如,如果我有一个 JavaScript 对象文字:
{
test: 123
}
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法可以将其变成这种特定风格的多行注释:
/**
* {
* test: 123
* }
*/
Run Code Online (Sandbox Code Playgroud)
...或者至少快速添加星号:
* {
* test: 123
* }
Run Code Online (Sandbox Code Playgroud)
..?
所以,我想在所有选定的行之前添加*
(空格-星号-空格)。
我已经安装了docblockr,这很好,但我看不到执行上述操作的快速方法。
javascript ×9
node.js ×2
reactjs ×2
atom-editor ×1
callback ×1
comments ×1
express ×1
jestjs ×1
less ×1
php ×1
php-7 ×1
promise ×1
redux ×1
unit-testing ×1
webpack ×1