- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力解决 HOC 注入(inject)的 props 类型。
很简单,在App Component中,有两个props:title
和message
。
但是title
是由HOC提供的。
这是此操作的代码:
/* @flow */
import React, { Component } from 'react';
import type { ComponentType } from 'react';
interface AppProps {
title: string;
message: string;
}
class App extends Component<AppProps, {}> {
static defaultProps = {
message: 'Helloworld'
}
render() {
return (
<div>
<div>Title: {this.props.title}</div>
<div>Message: {this.props.message}</div>
</div>
);
}
}
function injectProp<Props: {}>(
Component: ComponentType<{ title: string } & Props>
): ComponentType<Props> {
return function EnhancedComponent(props: Props) {
return <Component title="Hello" {...props} />;
}
};
export default injectProp(App);
看起来不错,但是当我运行流程时,它失败了
Missing type annotation for Props.
32| export default injectProp(App);
所以我尝试了这个,但没有运气:
export default injectProp<AppProps>(App);
现在我收到了一堆错误消息。
> babel-react-webpack-flow-boilerplate@1.0.0 flow F:\dev\web\proptype-test
> flow
Error ----------------------------------------------------------------------------------- src/js/components/App.js:32:16
Cannot compare boolean [1] to statics of `App` [2].
src/js/components/App.js:32:16
32| export default injectProp<AppProps>(App);
^^^^^^^^^^^^^^^^^^^ [1]
References:
src/js/components/App.js:10:7
10| class App extends Component<AppProps, {}> {
^^^ [2]
Error ----------------------------------------------------------------------------------- src/js/components/App.js:32:27
Cannot reference type `AppProps` [1] from a value position.
src/js/components/App.js:32:27
32| export default injectProp<AppProps>(App);
^^^^^^^^
References:
src/js/components/App.js:5:11
5| interface AppProps {
^^^^^^^^ [1]
Error --------------------------------------------------------------------------------------------- src/js/index.js:17:1
Cannot call `ReactDOM.render` because boolean [1] is not a React component.
src/js/index.js:17:1
17| ReactDOM.render(<App message="A" />, entryEl);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
References:
src/js/components/App.js:32:16
32| export default injectProp<AppProps>(App);
^^^^^^^^^^^^^^^^^^^^^^^^^ [1]
Error -------------------------------------------------------------------------------------------- src/js/index.js:17:17
Cannot call `ReactDOM.render` with `<App />` bound to `element` because boolean [1] is incompatible with string [2] in
type argument `ElementType` [3].
src/js/index.js:17:17
17| ReactDOM.render(<App message="A" />, entryEl);
^^^^^^^^^^^^^^^^^^^
References:
src/js/components/App.js:32:16
32| export default injectProp<AppProps>(App);
^^^^^^^^^^^^^^^^^^^^^^^^^ [1]
C:\Users\User\AppData\Local\Temp\flow\flowlib_6db8195\react.js:159:5
159| | string
^^^^^^ [2]
C:\Users\User\AppData\Local\Temp\flow\flowlib_6db8195\react.js:167:29
167| declare type React$Element<+ElementType: React$ElementType> = {|
^^^^^^^^^^^ [3]
Error -------------------------------------------------------------------------------------------- src/js/index.js:17:17
Cannot create `App` element because boolean [1] is not a React component.
src/js/index.js:17:17
17| ReactDOM.render(<App message="A" />, entryEl);
^^^^^^^^^^^^^^^^^^^
References:
src/js/components/App.js:32:16
32| export default injectProp<AppProps>(App);
^^^^^^^^^^^^^^^^^^^^^^^^^ [1]
Found 5 errors
Only showing the most relevant union/intersection branches.
To see all branches, re-run Flow with --show-all-branches
使用 flow-bin@0.69.0 和 React@16.3.0。我缺少什么?为什么 keep Flow 会提示不需要的类型注释?
最佳答案
这个问题将通过导出模块解决,如下所示:
export default injectProp<AppProps>(App);
更新到最新版本(0.86.0)即可。
我为此做了 repo : https://github.com/rico345100/hoc-prop-types-test
可能对像我一样遇到同样问题的人有帮助。
关于reactjs - Flow 需要 HOC 中 props 的类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53435785/
我有一个高阶组件,它使用 React Router 提供的 location.search Prop 来构造一个 queryParams 对象,并将其作为 Prop 传递给它的包装组件。 functi
当我从 tsx 文件导入 HOC 时,一切正常。但是当我将扩展名更改为 js 时,我看到一个 Jest 错误: Jest encountered an unexpected token. This u
我最近正在努力解决复杂的 HOC 问题,以及如何仅传递其中定义的新 Prop 而不是任何其他 Prop 。更准确地说,假设我的 HOC 使用其他 HOC 来扩展其属性,例如 const withSes
我的基本理解是 HOC 之类的连接(用于连接 redux 存储)和其他 HOC 在导出组件时应用于组件。 像这样 import React, { Component } from 'react'; i
我在创建简单的 HOC 时遇到问题,当没有查询参数时应该重定向到 404。否则,它应该只返回一个组件。 import React, { useState, useEffect } from 'reac
我有这个简单的高阶组件,它工作正常但它只接受一个组件: let VerticalSlider = (Komponent) => { return (props) => (
我想使用高阶组件向我的组件包装器添加样式。 Typescript 说 ComponentWithAdddedColors 有错误。 type Props = { bg?: string; }; f
在 Ansible 文档中,它的表述如下:- 也可以使用 --become-user 成为 root 以外的用户:$ ansible atlanta -a "/usr/bin/foo"-u 用户名 -
我正在研究无线 ad-hoc 网络中的邻居发现协议(protocol)。有许多协议(protocol)在发现阶段进行时仅依赖节点之间的信标消息。另一方面,还有其他方法试图在发现过程中传输更多信息(如节
这是我的父组件(Grid),(这里我传递了更多 hoc 使用的 Prop ,但我在这里省略了它们): 这是表组件: export const QuickBooksTable = withIntegr
背景故事:我在一家开发和制造商业产品的公司工作,该产品在一个农场中可以拥有多达 100 多台专用 PC。 我们每年仅获得少数新客户。 我们开发了一款 iPod/iPhone 应用程序,可让我们向农场发
我刚刚开始在 React 中使用 HOC,让我有点困惑的一件事是,这个示例中的内部函数如何访问props 作为参数? const withProps = Component => ( props
我尝试使用 HOC 模式而不是面向对象以避免冗余代码。 情况很简单,解释如下: 在主页中我有这样的内容: const WrappedComponent = Wrapper(Wrapped); 在包装
问题 让我们假设我有一个 SFC(我正在使用 TypeScript)并将其导出,如下所示: export const AppShell: React.SFC = (props: Props) => (
我正在构建这个 HOC Modal。 当我按下模态上的“Aplicar”按钮(TouchableItem:onPress)时,我需要访问 WrappedComponent 状态。 有什么办法可以做到这
我需要向所有我的React函数组件中添加添加[data-test-id]属性以进行测试的可能性。为了实现这一点,我创建了 withTestId() HOC,它将可选的 prop testId 添加到包
我刚刚开始在 React 中使用 HOC,让我有点困惑的一件事是,这个示例中的内部函数如何访问props 作为参数? const withProps = Component => ( props
我是 .net 背景的新手,这里的问题是 HOC 与 OOPS 概念中的继承有何不同,它具有具有基属性的父类和扩展 Base 并使用 Base 类中的状态、属性和基方法的子类。 React组件中实现P
我正在尝试创建一个 HOC,使常规功能组件“可触摸”。 所以我有一个像这样的 HOC: const Touchable = (Component, handler) => { const T =
我刚刚检查了 React 中的 HOC。他们很酷。但是,简单地包装一个组件不就可以达到相同的结果吗? 高阶组件 这个简单的 HOC 将状态作为属性传递给 CompositComponent const
我是一名优秀的程序员,十分优秀!