我认为useEffectHook 在每次渲染后运行,如果提供了一个空的依赖数组:
useEffect(() => {
performSideEffect();
}, []);
Run Code Online (Sandbox Code Playgroud)
但是这和下面的有什么区别呢?
useEffect(() => {
performSideEffect();
});
Run Code Online (Sandbox Code Playgroud)
注意[]结尾的缺失。linter 插件不会发出警告。
我在 VSCode 中看到此警告:
\n\n\n\n这是抛出 ts 警告的行:
\n\nimport packageJson from "../package.json";\nRun Code Online (Sandbox Code Playgroud)\n\n奇怪的是,构建和检查该项目运行良好:
\n\n$ tsc --project .\n\xe2\x9c\xa8 Done in 1.16s.\nRun Code Online (Sandbox Code Playgroud)\n\n$ tslint --config ../../tslint.json --project .\n\xe2\x9c\xa8 Done in 1.59s.\nRun Code Online (Sandbox Code Playgroud)\n\n这是 VSCode 解析器引起的警告,还是我的文件有问题tsconfig.json?
// tsconfig.json\n{\n "exclude": [\n "node_modules"\n ],\n "extends": "../../tsconfig.json",\n "files": [\n "package.json"\n ],\n "include": [\n "src/**/*"\n ],\n "compilerOptions": {\n /* Basic Options */\n "outDir": "dist",\n /* Module Resolution Options */\n "baseUrl": ".",\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n 从文档:
[init, the 3d argument] 允许您提取用于计算 reducer 之外的初始状态的逻辑。这对于稍后响应动作重置状态也很方便。
和代码:
function init(initialCount) {
return { count: initialCount };
}
function reducer(state, action) {
switch (action.type) {
...
case 'reset':
return init(action.payload);
...
}
}
function Counter({initialCount}) {
const [state, dispatch] = useReducer(reducer, initialCount, init);
...
}
Run Code Online (Sandbox Code Playgroud)
为什么我会在重用常量时这样做initialState?
const initialState = {
count: 5,
};
function reducer(state, action) {
switch (action.type) {
...
case 'reset':
return initialState;
...
}
}
function Counter({initialCount}) {
const [state, dispatch] = useReducer(reducer, …Run Code Online (Sandbox Code Playgroud) 很容易在任何推送或拉取请求上运行 GitHub 操作:
# Triggers the workflow on push or pull request events
on: [push, pull_request]
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将运行限制为针对特定基本引用打开的拉取请求,同时允许在所有分支上运行怎么办?
我想过这个:
on:
push:
branches:
- "*"
pull_request:
branches:
- "develop"
- "staging"
Run Code Online (Sandbox Code Playgroud)
但它没有用。我把这个 Action 添加到了一个特性分支,GitHub 没有接。
我的球有什么问题吗?为什么“*”不起作用?
在 vscode 中使用 prettier 有一段时间了,但它最近停止工作,我不确定这是他们的错误还是我的错误配置。
["INFO" - 02:54:03] Loaded module 'prettier@1.19.1' from '/Users/paulrberg/.nvm/versions/node/v10.17.0/lib/node_modules/prettier'
["INFO" - 02:54:03] Formatting using 'prettier-eslint'
["ERROR" - 02:54:03] Error formatting document.
r is not a function
TypeError: r is not a function
at /Users/paulrberg/.vscode/extensions/esbenp.prettier-vscode-3.13.0/dist/extension.js:1:352891
at t.default.safeExecution (/Users/paulrberg/.vscode/extensions/esbenp.prettier-vscode-3.13.0/dist/extension.js:1:353582)
at t.default.<anonymous> (/Users/paulrberg/.vscode/extensions/esbenp.prettier-vscode-3.13.0/dist/extension.js:1:352865)
at Generator.next (<anonymous>)
at s (/Users/paulrberg/.vscode/extensions/esbenp.prettier-vscode-3.13.0/dist/extension.js:1:347571)
Run Code Online (Sandbox Code Playgroud) 我是 Rust 的新手,我刚刚通过cargo new my_project. 我注意到cargo 提供了这两个命令行选项:
我认为后者可用于编译我机器上的任何项目,而前者只能在当前工作目录中使用。那是对的吗?还有其他区别吗?不带附加参数运行这两个命令会给我完全相同的输出。
在阅读Rust Book 的第 12.4 章时,我偶然发现了这个函数:
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
vec![]
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么在没有contents参数和返回值的显式生命周期注释的情况下代码不能编译-生命周期省略规则不适用于具有至少两个借用参数的函数。
但我很好奇这个query论点的隐含生命周期注释是什么。我可以想到两种情况:
// Scenario 1
pub fn search<'a>(query: &'a str, contents: &'a str) -> Vec<&'a str> {
vec![]
}
Run Code Online (Sandbox Code Playgroud)
// Scenario 2
pub fn search<'a, 'b>(query: &'b str, contents: &'a str) -> Vec<&'a str> {
vec![]
}
Run Code Online (Sandbox Code Playgroud)
两种情况query都可以编译,因此获得生命周期'a或'b. 哪一个是正确的?
我尝试使用 Yarn v3 安装本地包,结果撞到了墙上。这是我尝试过的所有事情:
yarn add file:../hardhat-packageryarn add ../hardhat-packager"hardhat-packager": "file:../hardhat-packager"进去package.json"hardhat-packager": "../hardhat-packager"进去package.json上述所有情况都会导致 Yarn 在安装步骤中卡住,如下图所示。我等了五分钟多,并确保我的互联网连接速度很快。
我知道有一个链接包的选项,但这并不是我想要的。我不需要符号链接,我想要复制实际的包文件。
我怎样才能做到这一点?我正在使用 Yarn v3.2.0
我使用节点9.3.0已有很长时间了,但是最近我迁移到了10.12.0。一切正常,当我这样做时node -v,npm -v我得到了正确的版本:
Paul-Bergs-Macbook:node paulrberg$ node -v
v10.12.0
Paul-Bergs-Macbook:node paulrberg$ which node
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/node
Paul-Bergs-Macbook:node paulrberg$ npm -v
6.4.1
Paul-Bergs-Macbook:node paulrberg$ which npm
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/npm
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行任何npm命令时,将使用旧版本。那是:
Paul-Bergs-Macbook:node paulrberg$ npm i truffle -g
/Users/paulrberg/.nvm/versions/node/v9.3.0/bin/truffle -> /Users/paulrberg/.nvm/versions/node/v9.3.0/lib/node_modules/truffle/build/cli.bundled.js
+ truffle@4.1.14
added 81 packages from 311 contributors in 1.715s
Run Code Online (Sandbox Code Playgroud)
和:
npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
??? truffle@4.1.14
Run Code Online (Sandbox Code Playgroud)
不知道这是否是仍指向最新版本的bash代码,但我似乎找不到任何证明。运行env并检查9.3.0环境变量不会产生任何结果。
到目前为止,我做了什么:
nvm uninstall 9.3.0nvm reinstall-with-packages~/.nvmrc并设置10.12.0在那里我知道 Suspense 组件是 React-ian代码拆分方法,它使网页加载速度更快。现在,假设您有一个像这样的组件层次结构:
<App>
<Suspense fallback={<FirstLoader/>}>
<OuterWrapper>
<Suspense fallback={<SecondLoader/>}>
<InnerWrapper>
{content}
</InnerWrapper>
</Suspense>
</OuterWrapper>
</Suspense>
</App>
Run Code Online (Sandbox Code Playgroud)
首先假设只有InnerWrapper延迟加载,在第二种情况下它们都是延迟加载的。
React 是在加载InnerWrapper后延迟OuterWrapper加载,还是同时加载?具体来说,是否在加载第一个组件后推迟渲染第二个 Suspense 的回退。
reactjs ×3
node.js ×2
react-hooks ×2
rust ×2
asynchronous ×1
glob ×1
javascript ×1
lifetime ×1
node-modules ×1
npm ×1
nvm ×1
package.json ×1
prettier ×1
rust-cargo ×1
tslint ×1
typescript ×1
use-effect ×1
use-reducer ×1
yarnpkg ×1
yarnpkg-v3 ×1