我遇到了这个问题,如果我将其取出并且停止工作,则.focus()
只能使用该问题setTimeout
。谁能解释我的原因,可能是我做错了,以及如何解决这个问题。
componentDidMount() {
React.findDOMNode(this.refs.titleInput).getElementsByTagName('input')[0].focus();
}
使用setTimeout的示例
componentDidMount() {
setTimeout(() => {
React.findDOMNode(this.refs.titleInput).getElementsByTagName('input')[0].focus();
}, 1);
}
JXS
<input ref="titleInput" type="text" />
渲染功能
render() {
const {title, description, tagtext, siteName} = (this.state.selected !== undefined) ? this.state.selected : {};
const hasContentChangedYet = this.hasContentChangedYet(title, description);
return (
<div>
<h2 className={styles.formMainHeader}>Edit Meta-Data Form</h2>
<table className={styles.formBlock}>
<tbody>
<tr>
<td className={styles.tagEditLabel}>
Tag
</td>
<td className={styles.inputFieldDisableContainer}>
{tagtext}
</td>
</tr>
<tr>
<td className={styles.tagEditLabel}>
Site
</td>
<td className={styles.inputFieldDisableContainer}>
{siteName}
</td>
</tr>
<tr>
<td className={styles.tagEditLabel}>
Title
</td>
<td className={styles.inputFieldContainer}>
<ReactInputField
ref="titleInput"
id="title"
defaultValue={(title) ? title : ''}
onChange={this.onInputChange}
placeholder="Title"
clearTool={true} />
</td>
</tr>
<tr>
<td className={styles.tagEditLabel}>
Description
</td>
<td className={styles.inputFieldContainer}>
<ReactInputField
id="description"
defaultValue={(description) ? description : ''}
onChange={this.onInputChange}
placeholder="Description"
clearTool={true} />
</td>
</tr>
</tbody>
</table>
<div className={styles.formFooter}>
<button id="save-button" className={styles.saveButton} disabled={!hasContentChangedYet} onClick={() => this.handleSavePressed()}>
Save
</button>
<button id="form-cancel-button" className={styles.cancelButton} onClick={this.actions.form.cancelUpdateToTagData}>
Cancel
</button>
</div>
</div>
);
}
在看到问题的更新之后,我意识到您已经将嵌套的HTML传递给了 render 函数,并且您感兴趣的input元素确实在调用ancestor元素的
componentDidMount 时不可用。如React v0.13 Change
Log中所述
:
ref
解析顺序略有变化,因此在componentDidMount
调用组件的方法后,即可立即获得对组件的引用;仅当您的组件在内调用父组件的回调时才应观察到此更改componentDidMount
,这是一种反模式,无论如何都应避免
这是你的情况。因此,无论你的HTML结构分解成单独渲染的元素,如所描述这里,然后你就会访问自己的输入元素 componentDidMount 回调; 或者您只是坚持使用自己的计时器。
使用 componentDidMount 确保只有当组件的代码运行 在调用它 的 安装 (见引自文档进一步下跌)。
注意不建议调用
React.findDOMNode :
在大多数情况下,您可以将ref附加到DOM节点,而完全避免使用
findDOMNode
。
注意
findDOMNode()
是用于访问底层DOM节点的转义图案。在大多数情况下,不建议使用此逃生阴影,因为它会穿透组件抽象。
findDOMNode()
仅适用于已安装的组件(即已放置在DOM中的组件)。如果尝试在尚未安装的组件上调用此方法(例如findDOMNode()
,render()
在尚未创建的组件上调用),则会引发异常。
并且从ref字符串属性的文档中:
另外,您可以消除对代码的需求,并使用JSX autoFocus
属性:
<ReactInputField
ref="titleInput"
autoFocus
... />
我遇到了这个问题,只适用于,如果我把它拿出来,它停止工作问题。 使用setTimeout的示例 JXS 我已经按照这个例子React集中在渲染后的输入 渲染函数
我已经用JSF+CDI+Liberty Server构建了一个简单的示例,但是我总是得到消息说我的bean的目标不可用,我不明白为什么。 我已经实现了以下库: javaee-api-7.0.jar javax.servlet-api-3.1.0.jar jsf-api-2.2.12.jar JSF-impl-2.2.2.jar 有可能版本有问题吗? UserBean.java index.xhtm
我有一个基于网站的网络应用程序,通过AAD登录验证用户。成功的登录会将用户重定向回带有访问令牌的应用程序(这部分都是使用adal_angular.js/adal.js完成的) 然后将令牌传递给一个基于站点的api,该api代表用户获得一个新的令牌来调用下游api,如本例(https://github.com/azure-samples/active-directory-dotnet-webapi-
问题内容: 我在使用以下代码时遇到了麻烦: 调用Offer.query({},function(){}); 在我的控制器中工作没有任何问题。但是这部分不起作用: 这总是返回400错误: “NetworkError:400错误的请求- https://api.trustyou.com/hotels/d8421e79-99f0-41b2-8d6e-9cfd62a9776b/seal.json?call
问题内容: 有两个函数hello1()和hello2()。 在中,延迟3秒后打印“ hello1”。 但是在中,它会立即打印“ hello2”。 我认为是因为它必须在setTimeout中使用函数名称。 如果我想在延迟3秒后执行带有参数的函数怎么办? 因为我想将参数传递给函数,所以我不能只在setTimeout中使用函数名,例如 问题答案: 当对函数使用括号时,将立即执行。 要将函数与参数一起使用
问题内容: 更新的问题 我的虚拟主机 问题答案: 这是问题的最可能原因。您已经在超级用户的主文件夹中创建了virtualenv。但是该文件夹不太可能被Apache访问。默认情况下,其他任何用户都无法访问用户的主文件夹。 Web服务器和WSGI过程将运行作为一个非特权用户通常命名为,,或者类似的东西。虽然您可以通过更改/ root /上的权限来解决此问题,但这不是很大。如果是普通用户,则危险性会降低