小编Ben*_*nni的帖子

"这个"反应更高阶的成分

我想将反应组件的共享功能移动到更高阶的组件,如下所示:

function withListFunctions(WrappedComponent) {
    return class extends React.Component {
        constructor(props) {
            super(props);
        }
        // my shared functionality
        deleteItem() {
            // Do something, then ...
            this.setState({itemDeleted: true});
        }
        render() {
            return (
                <WrappedComponent
                    deleteItem={this.deleteItem}
                 />
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用这种语法需要this在HOC的构造函数中明确地绑定:

this.deleteItem = this.deleteItem.bind(this);
Run Code Online (Sandbox Code Playgroud)

..但我想绑定包装的组件.所以我在包装组件的构造函数中尝试的是

this.props.deleteItem = this.props.deleteItem.bind(this);
Run Code Online (Sandbox Code Playgroud)

但这只会导致"无法分配给只读属性"错误,因为反应道具只是为了读取.

我知道我可以将状态项存储在HOC中并将其作为道具传递下去.但是,其他包装的组件功能将无法访问(可写),对吧?我想知道是否有一种方法可以共享未绑定的函数,然后将其绑定到包装的实例.

[编辑]我将Abdul Rauf的回答标记为"已接受",但我想说Karen Grigoryan的回答是我实际使用的解决方案,因为它的工作原理似乎只适合我的应用程序的复杂性.

javascript reactjs

5
推荐指数
1
解决办法
112
查看次数

Javascript OR 表达式:返回 *not* NaN 的操作数

我有一个 OR 表达式,它应该返回除以下内容之外的任何操作数NaN

(1 || NaN) // evaluates to 1 
(NaN || 1) // evaluates to 1
Run Code Online (Sandbox Code Playgroud)

但是当另一个操作数也是像0, null, undefinedor一样的假值时false,Javascript 总是返回最右边的操作数:

(0 || NaN) // evaluates to NaN
(NaN || 0) // evaluates to 0
// same for combinations of 0, null, undefined and false
Run Code Online (Sandbox Code Playgroud)

有没有办法将所需的行为“返回不是 的操作数NaN”放入一个漂亮而简短的表达式中,还是我必须依赖 if/else 构造?

javascript operator-precedence

2
推荐指数
3
解决办法
98
查看次数

Git checkout无意中删除了未跟踪的文件

我遇到了一个奇怪的Git行为:我有一个存储库,其中包含文件中指定的许多未跟踪文件和文件夹.gitignore.

我做的确切步骤:

  1. 藏匿4个文件: git stash
  2. 几个月前检查了我的第一次提交: git checkout <hash of first commit>
  3. 环顾四周,没有改变任何东西
  4. 回到我的工作部门做 git checkout <my working branch>
  5. 应用藏匿处: git stash apply

然后我注意到一些(不是全部)我未跟踪的文件和文件夹已经消失了.怎么可能?

附加信息:

  • 被隐藏的文件与消失的文件无关,我注意到存储操作只是为了完整性

  • 我没有执行其中一个命令,git stash --include-untracked或者git stash save -u像@Ashish Mathew猜测的那样

  • 似乎只有文件和文件已经消失,但是在.gitignore第一次提交时还没有,但后来被添加到了它中

git

1
推荐指数
1
解决办法
593
查看次数

标签 统计

javascript ×2

git ×1

operator-precedence ×1

reactjs ×1