React: рдПрд╕реНрд▓рд┐рдВрдЯ-рдкреНрд▓рдЧрдЗрди-рд░рд┐рдПрдХреНрд╢рди-рд╣реБрдХ: 'рд╣реБрдХ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рд╕рд┐рддре░ 2019  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдмрдЧ (рд╕рдВрднрд╡рддрдГ)

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?

рдкреНрд▓рдЧрдЗрди рдпрд╣ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ:

рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ "рдпреВрдЬрд╝рд╕реНрдЯреЗрдЯ" рдХреЛ рд╕рд╢рд░реНрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХреЛ рд╣рд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рд░реЗрдВрдбрд░ рдореЗрдВ рдареАрдХ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рдЯрд░реНрди рдХреЗ рдмрд╛рдж рдПрдХ рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХрд╣рд╛ рдерд╛? (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╣реБрдХ / рдирд┐рдпрдо-рдХреЗ-рд╣реБрдХ) рдЕрдиреБрдЧрд╛рдореА

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рднреА рд╣реБрдХ рдХреЛ рд╕рд╢рд░реНрдд рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред

рдХреЛрдб:

https://codesandbox.io/s/exciting-bhabha-mqj7q

function App(props) {
  const someObject = { propA: true, propB: false };

  for (const propName in someObject) {
    if (propName === true) {
      console.log("something");
    } else {
      console.log("whatever");
    }
  }

  // THE PLUGIN ERROR MSG ON THIS useState
  const [myState, setMyState] = useState(null);

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

image

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?

рдкреНрд▓рдЧрдЗрди рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧрд╛ред

рд░рд┐рдПрдХреНрдЯ рдХреЗ рдХреМрди рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ / OS рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИрдВ?

image

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ https://github.com/facebook/react/pull/16853

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

pathsFromStartToEnd 3
allPathsFromStartToEnd 2

рдпрд╣ рднреА possiblyHasEarlyReturn true


рдпрд╣ рд╡рд┐рд╢реЗрд╖ рддреНрд░реБрдЯрд┐ рддрдм рдмрддрд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрдм pathsFromStartToEnd рдФрд░ allPathsFromStartToEnd рдЕрд╕рдорд╛рди рд╣реЛрдВред

рджреЗрдЦреЗрдВ RulesOfHooks.js рд▓рд╛рдЗрди 404


рдпрджрд┐ рдЖрдк for..in рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓рд┐рдВрдЯ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, pathsFromStartToEnd рдФрд░ allPathsFromStartToEnd рджреЛрдиреЛрдВ рд╕рдорд╛рди 2 :

  const someObject = { propA: true, propB: false };
  const someFunction = (propName) => {
    if (propName === true) {
      console.log("something");
    } else {
      console.log("whatever");
    }
  }
  for (const propName in someObject) {
    someFunction(propName)
  }
  const [myState, setMyState] = useState(null);

рдореБрдЭреЗ рдЕрднреА рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред

@ рдмреЗрдпрд░рди , рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдордЖрд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдФрд░ (# 16853) рдмрдирд╛рдпрд╛ред

рдРрд╕рд╛ рд╣реЛрдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ allPathsFromStartToEnd рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдЧрд▓рдд рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рд╛рд░рдВрдн рд╕реЗ рдЕрдВрдд рддрдХ рдХреЗ рдкрдереЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 3 рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди 2 рд▓реМрдЯрддрд╛ рд╣реИред

рдРрд╕рд╛ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдЪрдХреНрд░реАрдп рд░рд╛рд╕реНрддреЛрдВ рдХреА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдХреИрд╢рд┐рдВрдЧ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░рд╛рдлрд╝ рдЯреНрд░реИрд╡рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ, рд╣рдореЗрдВ рдкрде рдЗрддрд┐рд╣рд╛рд╕ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЪрдХреНрд░реАрдп рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкрде рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдирддреАрдЬрддрди, рдЬрдм рдХреЛрдИ рд╢рд░реНрдд for...in obj , рддреЛ рджрд┐рд╢рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдХреБрдЫ рд░рд╛рд╕реНрддреЗ рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЕрднреА рднреА 2.4.0 рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд░реЗрдкреНрд░реЛ:

import * as React from "react";

function Component() {
  let isLastEven = false;
  for (let x of [1, 2, 3]) {
    if (x % 2 == 0) {
      isLastEven = true;
    } else {
      isLastEven = false;
    }
  }
  let y = React.useMemo(() => 1, []);
  return <div>{y}</div>;
}

рдХреНрдпрд╛ # 16853 рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ https://github.com/facebook/react/pull/16853

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kocokolo picture kocokolo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bloodyowl picture bloodyowl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jmullo picture jmullo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Prinzhorn picture Prinzhorn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DimitarChristoff picture DimitarChristoff  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ