小编Nat*_*lie的帖子

Redux Thunk `([arg(s)]) =>dispatch =>` 的目的?

下面的代码来自 Brad Traversy 在 MERN 堆栈上的 Udemy 课程。我是 Redux 和 Redux Thunk 的新手,我正在尝试了解其目的=> dispatch =>是什么。我知道它来自 Redux Thunk,它是在 Redux 存储文件中设置的。我认为dispatch这里使用 是为了从此函数中分派多个操作,并阅读该= ([arg(s)]) => dispatch =>语法是柯里化的一个示例(尽管这似乎并不正确,因为柯里化每个函数都有一个参数)。

我非常感谢任何帮助理解=> dispatch =>

(其他令人困惑的小点:在课程中,该函数setAlert被称为动作,但我不确定这是正确的,因为它包含多个动作分派。)

export const setAlert = (msg, alertType, timeout = 5000) => dispatch => {
  const id = uuidv4();
  dispatch({
    type: SET_ALERT,
    payload: { msg, alertType, id }
  });

  setTimeout(() => dispatch({ type: REMOVE_ALERT, payload: id }), timeout);
};
Run Code Online (Sandbox Code Playgroud)

reactjs redux redux-thunk

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

MDN 中的 JavaScript 接口

据我所知,JavaScript 是基于原型而不是类的 OOP 不考虑接口,而是依赖于鸭子类型。

然而,我经常可以在 MDN 在线文档中看到一些被描述为“接口”的对象,例如此处的存储:

https://developer.mozilla.org/en-US/docs/Web/API/Storage

实际上 window.Storage 存在并且是一个函数,但不是构造函数或工厂,并且在调用时失败。它没有像该页面中描述的那样的成员,而是 window.localStorage 。这一页

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

将 window.Storage 指向为 window.localStorage 访问的对象。我知道 window.localStorage 是一个本机对象,但我想了解 window.Storage 的作用以及为什么 MDN 将其称为“接口”,在什么意义上:它是浏览器开发人员遵守的规范,而不是基于类的范式中预期的严格“接口”?

在此先感谢您,对于奇怪的问题感到抱歉。只是想加深我对 ES 的理解。

javascript interface

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

为什么要使用IFFE闭包而不是常规闭包?

这两个闭包示例都具有在后续函数调用中保留count值的好处,而其他情况(如果未使用闭包),则每次函数调用后count都将重置为0。此外,在这两种情况下,计数变量(作为块中的任何let变量)都是私有的,即不可全局访问。

IFFE闭包示例改编自Marius Schulz的文章,他在其中提出了这种用法。我可以想到的是,使用IFFE版本的闭包而不是普通版本的唯一好处是,不必命名它(只需将其分配给变量即可再次调用它),或者您确实要为其命名,它将在全局范围内不可见-因此,有少一个污染全局名称空间的项目。我还有其他好处吗?

定期关闭:

function createCounter() {
  let count = 0;
  return function() {
    ++count;
    return `count equals ${count}`;
  };
};

let counter = createCounter();

console.log(counter()); // count equals 1 
console.log(counter()); // count equals 2
Run Code Online (Sandbox Code Playgroud)

IFFE关闭:

let countingFunction = (function() {
  let count = 0;
  return function() {
    ++count;
    return `count equals ${count}`;
  };
})();

console.log(countingFunction()); // count equals 1
console.log(countingFunction()); // count equals 2
Run Code Online (Sandbox Code Playgroud)

编辑:标记为重复的问题是一个不同的问题,并且所选答案不能回答该问题。

javascript closures

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

无法减小块引用字体大小

我使用 Bootstrap 创建了一个基本页面,无法使块引用的字体变小。当我更改 CSS font-size 属性时,边距会发生变化,因为它们基于该属性,但文本本身的大小不会发生变化。

代码笔

这是应用于块引用的 CSS:

blockquote {
  font-family: Georgia, serif;
  font-size: 1em;
  font-style: italic;
  margin: 3em auto !important;
  padding: 0.35em 40px;
  line-height: 1.45;
  position: relative;
  color: #383838;
}

blockquote:before {
  display: block;
  padding-left: 10px;
  content: "\201C";
  font-size: 80px;
  /* Element with abolute positioning is positioned relative to nearest positioned ancestor */
  position: absolute;
  /* Offsets from edges of element's containing block, ancestor to which element is relatively positioned */
  left: -20px; /* Negative moves it left …
Run Code Online (Sandbox Code Playgroud)

css twitter-bootstrap

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

合并提交第一和第二父母

在涵盖相对提交引用的 Udacity 课程中,它说:

^ 表示父提交,~ 表示第一个父提交

^ 和 ~ 之间的主要区别在于何时从合并创建提交。合并提交有两个父项。对于合并提交,^ 引用用于指示提交的第一个父项,而 ^2 指示第二个父项。第一个父级是您运行 git merge 时所在的分支,而第二个父级是合并到的分支。

基于在git log --oneline --graph命令行上运行的以下输出:

图形

使用 SHA 的提交f69811c是 HEAD~4^2 相对于(最顶层,带有头指针)提交9ec05ca。合并提交1a56a81的第二个父项是f69811c,课程解释了这一点“HEAD~4 引用了当前提交的第四个父项提交,然后 ^2 告诉我们它是合并提交的第二个父项(被合并到)”

根据以黄色引用的课程文本,它似乎e014d911a56a81的第一个父级,因为它是与合并提交具有相同分支的父级。

根据这些信息,e6c65a6的关系1a56a81是什么?

我不认为它也是第二个父母(如果可以有多个第一和第二个父母......),即使它也是合并到 master 的分支,因为该答案在课程测验中被拒绝。

另外,如果我是正确的,e014d911a56a81第一个母公司,是什么的关系2097521,并3772ab11a56a81(这似乎他们也第一次家长,再次,如果合并提交其实可以有多个父)?

git merge git-log

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

初始化与赋值

术语“初始化”和“赋值”似乎可以互换使用。我做了一些搜索,似乎技术上可能存在差异。我的理解是,在变量的上下文中,当 JavaScript 引擎使其可供使用时,变量就会被初始化,而赋值(无论是显式完成 [如let foo = 1;] 还是由 JavaScript 引擎完成,如下例所示)是一种方法为了达成这个。

let foo;
console.log(foo); // undefined (initialization and assignment?)
Run Code Online (Sandbox Code Playgroud)

我的理解正确吗?另外(如果是这样),在初始化过程中实际发生了什么以使变量可用?

javascript computer-science

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

模块模式是否需要使用 IIFE?

在 Udacity 课程中,它提到了关于模块模式的相互矛盾的事情:

模块模式需要使用 IIFE

模块模式的核心是利用范围、闭包和(通常)IIFE。

那么,如果我理解正确的话,模块模式需要使用闭包,但是闭包是否需要位于 IIFE 中?

javascript iife

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

JavaScript 中的接口是什么?

许多 MDN 页面将事物描述为“界面”——我很惊讶“界面”没有链接到更解释性的页面;它只是在 MDN 的Web API 页面上描述为“对象类型” 。

javascript

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

s~ 在 Perl 中做什么?

我正在使用的 Perl 文件包含许多s~. 我对 Perl 不熟悉,并且很难找到有关它的信息。我知道它与搜索和替换字符串有关。具体是s~做什么的?

例子:

s~ (Text)~ <a href="../images/text.pdf" target="_top">$1</a>~ig if /<p/;
Run Code Online (Sandbox Code Playgroud)

perl

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

在使用 [Symbol.iterator] 的用户定义迭代中,[Symbol.iterator] 被称为什么?

在解释如何使用户定义的可迭代的教程中,它说

那么我们如何在自己的对象上实现可迭代协议呢?我们通过定义一个带有 Symbol.iterator 键的方法来实现这一点。

[Symbol.iterator]鉴于它是方法的一部分,将其称为键是否正确?我的理解是键只能是属性的一部分(属性由键和值组成),而方法是对象内部使用的函数。

作为参考,这是教程中的示例:

class UserCollection {
  constructor(users) {
    this.users = [].concat(users);
  }

  [Symbol.iterator]() {
    let i = 0;
    let users = this.users;

    return {
      next() {
        if (i < users.length) {
          return { done: false, value: users[i++] };
        }

        return { done: true };
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript

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

当默认值不在最后时,在 switch 语句中使用 break after default

在 w3schools关于 switch 语句的教程中,它说:

如果 default 不是 switch 块中的最后一个 case,请记住以 break 结束 default case。

但是,正如该教程还指出:

当 JavaScript 遇到 break 关键字时,它会跳出 switch 块。

因此,如果在 switch 语句的开头有一个带 break 的默认值,为什么不总是执行默认值并且解释器立即退出该块?解释器没有按顺序读取 switch 语句中的项目?

javascript switch-statement

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

为什么只有在首先检查某个方法之后才能调用该方法?

在我的render方法中,如果我首先检查用于获取报价的getter方法(基于随机索引),则只能成功地从JSON报价的提取列表中渲染随机报价。这可以正常工作:{this.randomQuote ? this.randomQuote.quote : ''},但是如果我只是这样做{this.randomQuote.quote},则会收到“ TypeError:无法读取未定义的属性'quote'”。(请注意,quote是获取的JSON对象数组中每个对象的属性的名称。因此randomQuote方法根据randomQuoteIndex()方法选择的随机索引从JSON中选择一个对象,但仅选择quote属性仅仅检查一下是否this.randomQuote不是未定义的,那怎么可能让我调用render this.randomQuote.quote

这是该类的工作版本:

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      quotes: [],
      randomQuoteIndex: null
    }
  }

  componentDidMount() {
    // fetch method uses GET method by default; don't need to specify
    fetch('https://gist.githubusercontent.com/nataliecardot/0ca0878d2f0c4210e2ed87a5f6947ec7/raw/1802a693d02ea086817e46a42413c0df4c077e3b/quotes.json')
      // Takes a JSON response string and parses it into JS object
      .then(response => response.json())
      // state is set to quotes: quotes due to destructuring
      .then(quotes => this.setState({ quotes }, () => { …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

正确使用 useState 变量

我正在尝试将id带有 useState的道具应用于我的 DrumPad 组件,从其父 App 组件传入。在我的 app.js 文件中,正如它当前设置的那样,我收到一个错误“'id' 被分配了一个值但从未使用过。” 假设我需要使用 useState 设置变量以将 id 传递给 DrumPad 组件,我需要更改什么才能正确应用它?

应用程序.js:

const sounds = [
  { id: 'snare', letter: 'Q', src: 'https://www.myinstants.com/media/sounds/snare.mp3' },
  { id: 'bass 1', letter: 'W', src: 'https://www.myinstants.com/media/sounds/bass-drum.mp3' },
  // etc. 
];

const App = () => {
  const id = useState(''); // (Don't have setId since it won't change)

  return (
    <div className="App">
      {sounds.map(sound => (
        <DrumPad
          id={sounds.id}
        />
      ))}
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

DrumPad.js:

const DrumPad = () …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hooks

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