87939


下記のコードの意味がよく分からないです。この `strs` は一体どこから来たのでしょうか？

[code]

    setStreams(strs => {
      strs[streamId].removed = true
      return { ...strs }
    })
    
[/code]

これステートのStreamsを呼び出して渡しているんですね。

### 参照

<https://github.com/yassun-youtube/nextjs-agora-
sample/blob/master/pages/index.js#L89>


CC BY-SA 4.0
2022-03-20T12:25:25.243
87936
2022-03-21T03:25:46.303
22565
question
javascript reactjs
関数の引数内で実行される関数？？


JavaScriptでは関数もオブジェクトです。  
で、その関数`SetStreams`は引数として関数オブジェクトをとっているわけですね。

[code]

    setStreams(func);
    
[/code]

この引数`func`として、提示のコードでは「アロー関数式」を渡しています。  
`strs`はアロー関数式の引数です。  
アロー関数式について下記を参照して学んでみてください。

[アロー関数式 - JavaScript |
MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions)


CC BY-SA 4.0
2022-03-20T13:52:04.947
87938
2022-03-20T13:52:04.947
45045
87936
answer


[`useState`](https://ja.reactjs.org/docs/hooks-reference.html#functional-
updates)の仕様

> 関数は前回の state の値を受け取り

です(、という以外に答えようが無い気がします...)。

どこから来たか、というと React フレームワークから渡された、という回答になるでしょうか。


CC BY-SA 4.0
2022-03-20T14:15:56.603
87939
2022-03-21T03:25:46.303
2022-03-21T03:25:46.303
2808
2808
87936
answer


[`=>`はアロー関数式](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions)と呼ばれ、関数オブジェクトを構築します。一旦、変数に格納した場合

[code]

    var lambda = strs => {
      strs[streamId].removed = true
      return { ...strs }
    };
    setStreams(lambda);
    
[/code]

であり、[function関数式](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/function)を使って書くと

[code]

    var lambda = function (strs) {
      strs[streamId].removed = true
      return { ...strs }
    };
    setStreams(lambda);
    
[/code]

概ねこのような意味になります。

> この `strs` は一体どこから来たのでしょうか？

上記から分かると思いますが、`strs`はどこかから来たのではなく、関数の仮引数です。


CC BY-SA 4.0
2022-03-21T00:08:17.733
87941
2022-03-21T00:08:17.733
4236
87936
answer