javascript - '类型错误 : Right side of assignment cannot be destructured' useContext React Hooks

标签 javascript reactjs react-hooks use-context

我在使用 React Hooks 时遇到了 useContext 方法的问题。我的 MapStyle 上下文类(使用 Google Maps API)如下:

import React, { createContext, useState } from 'react';

const MapStyleContext = createContext();

function MapStyleProvider(props) {
const [selectedMapStyle, setSelectedMapStyle] = useState();

return (
    <MapStyleContext.Provider value={{ selectedMapStyle, setSelectedMapStyle}}>
        {props.children}
    </MapStyleContext.Provider>
);
}

export { MapStyleContext, MapStyleProvider };

我有 map 组件试图访问 selectedMapStyle 属性:

...
export default function Map() {
const { isLoaded, loadError } = useLoadScript({
    googleMapsApiKey: process.env.REACT_APP_MAPS_API_KEY
});
const { selectedMapStyle } = useContext(MapStyleContext);
...

最后,在 MapStyle 组件中,我尝试在用户更改单选按钮的值时使用 setter setSelectedMapStyle:

import React, { useContext } from 'react';
import { Card, CardBody, Button, FormGroup, Label, Input } from 'reactstrap';
import { MenuContext } from '../../MenuContext';
import { MapStyleContext } from '../mapStyle/MapStyleContext'
import '../Tool.css';

export default function MapStyle() {
    const {setSelectedItem} = useContext(MenuContext);
    const {setSelectedMapStyle} = useContext(MapStyleContext);

    const mapStyles = [
        { 'label': 'Map (default)', 'value': 'default' },
        { 'label': 'Grayscale (Clean)', 'value': 'cleanGray' },
        { 'label': 'Subtle Grayscale', 'value': 'subtleGray' },
        { 'label': 'Ultra light', 'value': 'ultralight' },
        { 'label': 'Clean (no labels)', 'value': 'cleanNoLabel' },
        { 'label': 'Clean (roads)', 'value': 'cleanRoads' }
    ];

    return (
        <div className="tool">
            <Card>
                <CardBody>
                    <div className="clearfix">
                        <h3 className="float-left mb-0 mr-2">Map Style</h3>
                        <Button onClick={() => setSelectedItem(null)} className="float-right" close />
                    </div>
                    <hr />
                    <FormGroup tag="fieldset">
                        {mapStyles.map(mapStyle => (
                            <FormGroup key={mapStyle.value} check>
                                <Label check>
                                    <Input type='radio' name='mapStyle' value={mapStyle.value} onChange={setSelectedMapStyle(mapStyle.value)}/>
                                    {mapStyle.label}
                                </Label>
                            </FormGroup>
                        ))}
                    </FormGroup>
                </CardBody>
            </Card>
        </div>
    );
}

我不太确定我哪里出错了,但是当我使用这个上下文时,上下文 Prop 似乎永远不会正确加载(给我类型错误)。

最佳答案

您在这里遇到的问题是 useContext(MapStyleContext) 的值在初始化时为空,并且您从未将父组件或当前组件包装在 中上下文提供者

这是一个例子:

function Map() {
 return (
  <Context.Provider>
    {/*children */}
  <Context.Provider>
 );
}

关于javascript - '类型错误 : Right side of assignment cannot be destructured' useContext React Hooks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64326598/

相关文章:

javascript - Polymer 不允许在 Chrome 中设置内部元素的样式和传播事件

javascript - 从另一个 html 读取集合

reactjs - Laravel 5.4 无法运行 "php artisan preset react"命令

javascript - 有什么方法可以用 Javascript 检测 Force Click?

javascript - 如何验证PDF表单?

reactjs - Mousetrap.bindGlobal 不是一个函数

javascript - 在组件挂载上添加 touchmove 事件监听器

reactjs - 如何在具有 protected 功能的 React Router 中映射路由?

javascript - 如何在功能性 react 组件中对数组进行一次洗牌?

reactjs - 将 React Hook 和 redux 一起用于 React 功能组件是不是很糟糕?