我有一个包含许多不同前端 React 项目的存储库,它们都有自己的 package.json 文件。
我有四个要求:
这些包不需要同时运行。并非每个项目都包含完全相同的依赖项,但所有项目都至少包含一些常见的依赖项(即 React、Webpack、Babel 等)。这些包也是完全私有的,不应在 npm 上发布,而只能在 GitHub 上发布。
我已经对工具进行了一些研究,但我很困惑是否仅使用 Yarn Workspaces 就能解决问题,或者是否有必要使用 Lerna。这是我迄今为止在 Yarn Workspaces 中所做的事情:
文件夹结构:
Repo-root
Packages
Project-1
Project-2
Run Code Online (Sandbox Code Playgroud)
回购根 package.json:
{
"private": true,
"name": "example-monorepo",
"workspaces": ["packages/*"],
"scripts": {}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,Yarn Workspaces 尝试将所有常见依赖项移至幕后的根 node_modules,但我对如何完成共享依赖项安装和更新到最新版本要求感到困惑。Yarn Workspaces 能否自行满足要求,或者 Lerna 是否需要此功能?在勒纳如何实现这一目标?我是否需要定义一个全局的 package.json“单一事实来源”,或者这些工具是否在幕后自行执行某些版本?Lerna 或 Yarn Workspaces 如何“知道”如何在没有全局版本范围集的情况下将所有单独的 package.json 文件更新到最新版本?(我希望所有项目都相同)
我正在使用该date-fns库将 javascriptdate对象格式化为特定格式。date-fns使用Unicode 日期字段符号。在此记录符号的表中,“本地”(即本地星期几:e)和非本地符号(星期几:E)之间存在区别。还有 ISO 版本(ISO 星期几:)i,以及独立版本。
我知道在格式化完整日期时,我不应该使用独立版本。但我不太清楚本地、非本地和 ISO 之间的区别。
我的问题:假设这是日期:
const date = new Date('2021-04-12')
假设我想打印出Monday, April 12世界各地的信息,无论时区如何,这些有什么区别:
format(date, 'EEEE, MMMM d.')星期几
format(date, 'iiii, MMMM d.')ISO 星期几
format(date, 'eeee, MMMM d.')当地星期几
它们取决于本地用户时间吗?我看到这个问题,这表明我需要使用它getTimezoneOffset()来确保各地的时间一致。但我不确定 Unicode 符号如何影响显示的内容。
我在Webpack工作流程中使用SVG遇到很多麻烦。我正在尝试使其与background: url(sample.svg)CSS中的属性一起显示。单独使用它是行不通的,因此我认为我已经使用了装载程序。这是我使用的步骤。
我使用svg-url-loader加载了SVG。
1.
我svg-url-loader通过npm 安装并将其添加到我的module.exports:
{
test: /\.svg/,
use: {
loader: 'svg-url-loader'
}
},
Run Code Online (Sandbox Code Playgroud)
2. 我将其添加到index.js文件的顶部:
require('svg-url-loader!./images/topography.svg');
Run Code Online (Sandbox Code Playgroud)
3.
我background-image在我的CSS中添加了SVG路径:
body {
background-image: url("../images/topography.svg");
background-size: 340px, auto;
min-height: calc(100vh - 100px);
margin: 50px;
background-attachment: fixed;
letter-spacing: -1px;
}
Run Code Online (Sandbox Code Playgroud)
4. SVG未呈现到页面。当我在浏览器中检查身体时,我发现:
background: url(data:image/svg+xml,module.exports = __webpack_public_path__ + '8dccca4….svg';);
Run Code Online (Sandbox Code Playgroud)
我对data-uri不太了解,所以也许我遇到了这个问题。
另外,我尝试使用不同的SVG文件进行了此操作,但它们均无效。
我建立了一个简单的计数器应用程序:
class Counter extends React.Component {
constructor(props) {
super(props);
this.handleAddOne = this.handleAddOne.bind(this);
this.handleMinusOne = this.handleMinusOne.bind(this);
this.handleReset = this.handleReset.bind(this);
this.state = {
count: 0
};
}
componentDidMount() {
const stringCount = localStorage.getItem('count');
const count = parseInt(stringCount);
if (isNaN(count) === false) {
this.setState(() => ({ count }));
}
}
componentDidUpdate(prevProps, prevState) {
if (prevState.count !== this.state.count) {
localStorage.setItem('count', this.state.count);
console.log('componentDidUpdate');
}
}
handleAddOne() {
this.setState((prevState) => {
return {
count: prevState.count + 1
}
});
}
handleMinusOne() {
console.log('handleMinusOne');
this.setState((prevState) => { …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 React 中重新创建一个旧的 Flash 游戏。游戏的目标是按下按钮一段时间。
这是旧游戏:http : //www.zefrank.com/everysecond/index.html
这是我的新 React 实现:https : //codesandbox.io/s/github/inspectordanno/every_second
我遇到了问题。当释放鼠标时,我使用 Moment.js 时间库计算按下按钮和释放按钮之间的时间量。如果timeDifference之间onMouseDown和onMouseUp事件中targetTime,我希望游戏level,增加和targetTime提高为好。
我正在handleMouseUp事件处理程序中实现这个逻辑。我正在将预期时间打印到屏幕上,但逻辑不起作用。此外,当我console.log()时代时,它们与打印到屏幕上的不同。我相当确定timeHeld并且timeDifference没有正确更新。
最初我认为我做事件处理程序的方式有问题,我需要使用useRef()or useCallback(),但在浏览了其他一些问题后,我不太了解这些问题,无法知道在这种情况下是否必须使用它们。由于我不需要访问以前的状态,所以我认为我不需要使用它们,对吗?
游戏逻辑在这个包装组件中:
import React, { useState } from 'react';
import moment from 'moment';
import Button from './Button';
import Level from './Level';
import TargetTime from './TargetTime';
import TimeIndicator from './TimeIndicator';
import Tries from './Tries';
const TimerApp = () …Run Code Online (Sandbox Code Playgroud) 此算法的目标是取一个数字的每个数字的平方,将它们加在一起,然后继续重复直到1返回数字。我确定算法可以正常工作,但是我不能完全理解return。为什么这不起作用?
const n = 19;
const sumSquare = (n) => {
const N = n.toString();
let sum = 0;
for (let digit of N) {
const product = +digit * +digit;
sum += product;
}
console.log(sum);
if (sum === 1) {
return true;
} else {
sumSquare(sum);
}
};
console.log(sumSquare(n));Run Code Online (Sandbox Code Playgroud)