反应上下文Api,使用外部提供方的使用者

时间:2019-02-02 07:15:34

标签: reactjs react-context

我对上下文api有基本的疑问。我们可以在context.provider之外使用Context.consumer组件吗?

我有一个组件,其中两个选择标签具有相同的选项。我包裹第一与上下文提供选择和获取的数据作为例如,

<DataProvider loadRestarantsOnWillMount {...this.context}>
            <select  className="select_Restaurent float-right "
                        defaultValue=""
                      >
                        <option>All Restaurants</option>
                        <DataContext.Consumer>
                          {({ restarants }) => {
                            return (
                              restarants &&
                              restarants.map((r, idx) => (
                                <option value={r.id} key={String(idx)}>
                                  {r.name}
                                </option>
                              ))
                            );
                          }}
                        </DataContext.Consumer>
                      </select>
                    </DataProvider>

现在,第二个选择标记位于引导程序模式中,为了获取重新生成列表,我尝试将这个选择与context.consumer包装在一起,

 <DataContext.Consumer>
   {({ restarants }) =>
       restarants &&
        restarants.map((r, idx) => (
           <option value={r.id} key={String(idx)}>
              {r.name}
            </option>
         ))
    }
 </DataContext.Consumer>

但不要在这里引起批评。

上下文是在单独的文件中定义的,并且restarant是从api的DataProvider组件的onComponentWillmount加载的, 如果我再次用<DataProvider>包装第二个使用者,我认为将会再次发生不必要的api调用。

那么,我可以在提供者之外吸引消费者吗?还是我应该将整个页面都包裹在<DataProvider>中?我想避免这种情况,只是为了两个小的选择标签。

顺便说一下,整个组件已经设置了另一个static contextType上下文,所以我不能使用Datacontext作为组件上下文。

0 个答案:

没有答案