如何从Clojurescript中修补React模块

时间:2017-09-06 19:11:05

标签: javascript clojurescript monkeypatching

我在ClojureScript项目中使用react-select但是有一个我想要翻译的硬编码字符串(请参阅here):

function promptTextCreator (label) {
    return `Create option "${label}"`;
}

我会发送PR来使这个字符串可配置,但在此期间我有一个问题。

如果我从JS控制台检查我的应用程序,我可以输入:

> window.deps["react-select"]["Creatable"].promptTextCreator

打印

ƒ c(e){return'Create option "'+e+'"'}

现在在我的cljs项目中我尝试了这个:

(set! (.-promptTextCreator Creatable) #(str "TESTING " % "!"))

有趣的是,我可以看到应用程序中的更改:

> window.deps["react-select"]["Creatable"].promptTextCreator

现在打印

ƒ (p1__44104_SHARP_){
    return [cljs.core.str("TESTING "),cljs.core.str(p1__44104_SHARP_),cljs.core.str("!")].join('');
}

问题:我的应用仍会显示旧的未更改的字符串。我还尝试用以下命名命名新函数:

(set! (.-promptTextCreator Creatable) (fn c [e] (str "TESTING " e "!")))

> window.deps["react-select"]["Creatable"].promptTextCreator

现在打印:

ƒ club$views$c(e){
    return [cljs.core.str("TESTING "),cljs.core.str(e),cljs.core.str("!")].join('');
}

但没有运气:旧的未翻译字符串显示在应用程序中。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

promptTextCreator是一个属性,您可以传入自定义函数。为什么需要猴子补丁?