首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React - prop .isRequired

React - prop .isRequired
EN

Stack Overflow用户
提问于 2021-11-05 14:39:34
回答 1查看 44关注 0票数 2

我收到了这个警告

道具类型失败:道具queryObjState.isRequiredRefineSearchBar中被标记为required,但其值为undefined

为什么需要这个道具,我在propTypes中没有isRequired。

任何帮助都是最好的,谢谢!

代码语言:javascript
复制
export default function RefineSearchBar({ travelAdvisorApi, queryObjState }) {
  const dispatch = useDispatch();
  const [formData, setFormData] = useState({
    location: '',
    coordinates: {
      latitude: 0,
      longitude: 0,
    },
    radius: 5,
    priceLevel: '',
  });
  console.log(queryObjState);
  const setLocationResponse = (location, coordinates, radius = 5) => {
    setFormData((prev) => ({
      ...prev, location, coordinates, radius,
    }));
  };
  const submitForm = () => {
    if (!formData.coordinates.latitude && !formData.coordinates.longitude) {
      return;
    }
    dispatch(setSearchQueries(formData));
    travelAdvisorApi(formData);
  };

  return (
    <div className="sidebar w-100 d-flex justify-content-evenly align-items-start py-2">
      <HandleAutocomplete
        setLocationResponse={setLocationResponse}
        queryLocation={queryObjState.location}
      />
      <Container fluid>
        <Button type="button" onClick={submitForm}>
          Refine Search
        </Button>
      </Container>
    </div>
  );
}

RefineSearchBar.propTypes = {
  travelAdvisorApi: PropTypes.func.isRequired,
  queryObjState: PropTypes.shape(PropTypes.any),
};
RefineSearchBar.defaultProps = {
  queryObjState: {
    location: '',
    coordinates: {
      latitude: 0,
      longitude: 0,
    },
    radius: 5,
    priceLevel: '',
  },
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-05 15:25:53

根据to this issue in prop-types的说法,当您向PropTypes.shape(...)传递除javascript对象之外的任何对象时,都会出现错误。

您可以直接使用PropTypes.any省略它

代码语言:javascript
复制
RefineSearchBar.propTypes = {
  travelAdvisorApi: PropTypes.func.isRequired,
  queryObjState: PropTypes.any,
};

但是,如果您希望正确定义prop,则必须为PropTypes.shape提供一个有效的javascript对象,每个子属性都具有该对象,并使用PropTypes对其进行验证

代码语言:javascript
复制
RefineSearchBar.propTypes = {
  travelAdvisorApi: PropTypes.func.isRequired,
  queryObjState: PropTypes.shape({
    location: PropTypes.string,
    coordinates: PropTypes.shape({
      latitude: PropTypes.number,
      longitude: PropTypes.number,
    }),
    radius: PropTypes.number,
    priceLevel: PropTypes.string,
  }),
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69854969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档