代码之家  ›  专栏  ›  技术社区  ›  Armeen Moon

同一提供程序的多个声明是否会在React中创建新实例?

  •  1
  • Armeen Moon  · 技术社区  · 7 年前

    问题1

    问题2 LazyloadProvder是否会使用共享 value

    const value1 = {wow: () => {}}
    <App>
      <LazyloadProvider value={value1}>
        <LazyloadConsumer >
         <h1>hello sibling 1</h1>
        </LazyloadConsumer>
        <LazyloadProvider value={value1}>
          <LazyloadConsumer>
           <h1>hello sibling 1 - child nest</h1>
          </LazyloadConsumer>
        </LazyloadProvider>
      </LazyloadProvider>
      <LazyloadProvider value={value1}>
        <LazyloadConsumer>
         <h1>hello sibling 2</h1>
        </LazyloadConsumer>
      </LazyloadProvider>
    </App>
    

    问题3 不同的呢 values ?

    const value1 = {wow: () => {}}
    const value2 = {wow: () => {}}
    const value3 = {wow: () => {}}
    <App>
      <LazyloadProvider value={value1}>
        <LazyloadConsumer >
         <h1>hello sibling 1</h1>
        </LazyloadConsumer>
        <LazyloadProvider value={value2}>
          <LazyloadConsumer>
           <h1>hello sibling 1 - child nest</h1>
          </LazyloadConsumer>
        </LazyloadProvider>
      </LazyloadProvider>
      <LazyloadProvider value={value3}>
        <LazyloadConsumer>
         <h1>hello sibling 2</h1>
        </LazyloadConsumer>
      </LazyloadProvider>
    </App>
    

    我不太明白github的问题,但我认为它谈论的是类似的东西 https://github.com/facebook/react/issues/13346

    1 回复  |  直到 7 年前
        1
  •  1
  •   Estus Flask    7 年前

    上下文 Consumer 从最近的服务器接收一个值 Provider .

    <LazyloadConsumer> 他是个孩子 <LazyloadProvider value={value2}> , <LazyloadProvider value={value1}>

    这与变量作用域中的逻辑相同:

    const foo = 1; // won't affect inner scope any way
    {
      const foo = 2;
      console.log(foo); // 2
    }