【发布时间】:2018-03-30 14:49:06
【问题描述】:
我有一个应用程序,每次用户按下快捷键 Ctrl+D 时,我都需要添加特殊字符、表情符号或类似的东西。
问题是我正在使用flux并且我的页面上有几个输入,所以当有人在其中一个输入中添加一个字符时,它会调用一个动作,分派到商店,然后他们会更新视图。
要添加这个特殊字符,我需要处理 keyEvent 并知道使用哪个输入组件来更新存储中的相应属性。
handleShortcut(evt) {
if (evt.keyCode === ...) {
MyActions.addSpecialChar();
evt.preventDefault();
}
}
这是唯一的方法吗?我知道我可以使用document.activeElement 或evt.target 获取输入,但由于输入由商店状态控制,我无法更改它们的值...有什么想法吗?
** 更新**
为了让事情更清楚......我想让我的应用程序表现得像一个“桌面应用程序”,无论我在我的应用程序中的哪个输入,如果我按下组合键,它会放置一个特殊的字符在那个输入中,这意味着它将由 onChange 处理。 (我对 React 或 JS 不太熟悉,所以可能我要求太多了..)
所以我会在我的高阶组件中有一个 onKeyPress 来处理组合,并在将特殊字符添加到输入的value 属性后触发活动输入上的 onChange。
我实现它的方法是在每个输入上设置一个 onKeyPress,它将查找组合并发送与我的 onChange 相同的操作,但在文本中使用特殊字符。
<input
onKeyPress={(evt)=>{
/* ... Check combination ... */
let text = _addSpecialChar(evt.target.value);
MyActions.update(text);
}}
onChange={(evt)=>{
MyActions.update(evt.target.value);
}}
/>
正如我上面所说,我想将与 onChange 的组合作为普通字符来处理,因此我不必在每个输入上都添加 onKeyPress。这可能吗?
【问题讨论】:
-
您的商店状态是什么样的?为什么不能将表情符号传递到您的商店状态?
-
@ChaseDeAnda 我可以而且我可以,但是我想添加一个快捷方式来放置一个表情符号,就像一个普通字符一样,无论哪个输入,例如,我可以只使用 onChange 添加一个表情符号,如果我复制/粘贴它。我更新了我的问题...
标签: javascript reactjs reactjs-flux