在查看其他开发人员在使用Redux时处理输入焦点的方式时,我遇到了一些关于ReactJS组件的通用指南,如下面的。然而,我担心的是focus()函数是必需的,我可以看到在多个组件为焦点而争吵时可能出现奇怪的行为。有没有一种处理焦点问题的方法?是否有人在使用redux和react进行实用主义的焦点设置?如果是,您使用什么技术?
相关的:
我的方法是使用ref
回调,这是一种元素的onRender完整
。在那个回调中,我可以聚焦(有条件地,如果需要的话),并获得未来聚焦的参考。
如果在操作运行后有条件地呈现输入,那么ref回调应该触发一个焦点,因为在调用操作后ref还不存在,但只有在呈现完成后才存在。处理componentdiddupdate
之类的focus
似乎一团糟。
// Composer.jsx -- contains an input that will need to be focused somewhere else
class Composer extends Component {
render() {
return <input type="text" ref="input" />
}
// exposed as a public method
focus() {
this.refs.input.focus()
}
}
// App.jsx
@connect(
state => ({ isComposing: state.isComposing }),
...
)
class App extends Component {
render() {
const { isComposing } = this.props // or props, doesn't matter
return (
<div>
<button onClick={::this._onCompose}>Compose</button>
{isComposing ? <Composer ref={c => {
this._composer = c
this._composer && this._composer.focus() // issue initial focus
}} /> : null}
</div>
)
}
_onCompose() {
this.props.startComposing() // fire an action that changes state.isComposing
// the first time the action dispatches, this._composer is still null, so the ref takes care of the focus. After the render, the ref remains so it can be accessed:
this._composer && this._composer.focus() // focus if ref already exists
}
}
为什么不autoFocus
或isfocused
prop?
由于HTMLInputElement
将value
作为一个道具,但将focus()
作为一种方法——而不是isFocused
prop——我会继续使用方法来处理它isFocused
可以获取一个值,但是如果用户从输入中模糊,该值会发生什么变化?它将不同步。此外,如注释中所述,autoFocus
可能与多个组件冲突
那么如何在道具和方法之间取舍呢?
在大多数情况下,道具就是答案。方法只能用于“开火并忘记”事件,例如当新消息出现时聊天中的scrollToBottom
,ScrollToView
等。这些是商店不关心的一次性行为,用户可以通过交互进行更改,因此布尔属性不适合。对于所有其他的事情,我会用道具。
这里有一个jsbin:
http://jsbin.com/waholo/edit?html, js,输出
我正在使用react router和react router redux处理我页面上的导航。我需要在组件内以编程方式更改url。我试着用这个方法:历史。推送实现这一点,但此方法只是更改url,与此url关联的组件不会更新。此应用程序是带有分页的简单列表,因此当我切换到下一页时,url会更改为例如/posts/1到/posts/2,但视图不会更新。我认为这应该是这样的: 用户单击分页项并单击处理程序
问题内容: 有以下代码: 显然,的调用以某种方式改变了类的属性和行为。 这是怎么发生的?如何在代码中使用这种方法? 示例代码是zope.interface模块的一部分。 问题答案: 详细的“会发生什么” 该函数检查框架堆栈并更改构造类的名称空间(python )。python语句中的所有内容都在该命名空间中执行,结果形成类主体。 该函数为类命名空间添加了额外的值,其中包含一些数据(已传递给该函数的
声明性映射样式是SQLAlchemy使用的主要映射样式。参见章节 声明性映射 对于最高层的介绍。 具有声明性的表配置 声明性表格 访问表和元数据 声明性表配置 具有声明性表的显式架构名称 添加新列 带命令表的声明性(又称混合声明性) 用反射表声明性地映射 使用DeferredReflection 使用自动映射 具有声明性的映射器配置 使用声明性定义映射属性 具有声明性的映射器配置选项 其他声明性映
问题内容: 在我的一个项目中,我有一个管理多个客户(或客户,如果您愿意的话)的应用程序。对于他们每个人,我在数据库上都有一个专用的架构。但是,应用程序一次只处理一个客户端,即,用户必须从应用程序中的一个客户端切换到另一个客户端(在运行时,不重新启动应用程序),以便从该新客户端访问数据。 您将如何管理此类项目的连接以及持久层? 我想为此使用hibernate。在处理几个数据库/模式时,我必须特别注意
有时一些业务逻辑的发生你每次都想重试它。最经典的例子就是远程调用,为了这个目的Spring Batch提供了一个Aop拦截器用来封装一个方法调用RetryOperations 。RetryOperationsInterceptor依据RetryPolicy 提供的RepeatTemplate 执行拦截方法和重试失败。 下面是一个示例使用Spring AOP命名空间的声明式迭代重复一个服务调用的一个
函数是JavaScript中的一等对象,这意味着可以把函数像其它值一样传递。 一个常见的用法是把匿名函数作为回调函数传递到异步函数中。 函数声明 function foo() {} 上面的方法会在执行前被 解析(hoisted),因此它存在于当前上下文的任意一个地方, 即使在函数定义体的上面被调用也是对的。 foo(); // 正常运行,因为foo在代码运行前已经被创建 function foo