我正在使用react,希望输入文本显示内存数据存储中的值,然后在值更改时更新存储,从而触发重新渲染。我看到的问题是,我的输入文本在重读时失去了焦点。我已经尝试设置key属性,覆盖shouldComponentUpdate并返回false,以防止react重新为组件命名,但没有效果。不管怎样,后者似乎不是一个好的长期解决方案。
从文档:
请注意,在未来的React中,可能会将ashidComponentUpdate()视为提示而不是严格的指令,返回false可能仍然会导致组件的重新渲染。
代码:
export class TextInput extends React.Component {
constructor(props) {
super();
this.storePath = props.value;
const value = dataStore.get(this.storePath) || '';
this.state = { value };
}
shouldComponentUpdate() { return false; }
update(event) {
dataStore.update(this.storePath, event.target.value);
}
render() {
return <input type="text" value={this.state.value} onChange={e => this.update(e)}/>;
}
}
编辑
我正在使用react路由器。
const App = props => (
<Router history={browserHistory}>
<div>
<Switch>{
Array.from(this.routeMap.keys()).map(path => {
const viewFn = this.routeMap.get(path);
return <Route key={path} path={path} render={viewFn}></Route>;
})
}</Switch>
</div>
</Router>
);
有一个顶级组件通过路由拉入,它使用my TextInput组件。
我找到了。每次我调用ReactDOM。render
我正在重新说明我的顶级组件函数,这似乎导致我的输入文本失去焦点。它必须对传递的组件函数/类进行身份检查,以查看它是否与前一个相同,如果与前一个相同,则完全从头开始重新加载。
因此,以下是如何避免这样做:
const render = props => {
const App = props => (
<Router history={browserHistory}>
<Switch>
<Route key="/login" path="/login" render={() => View(props)}/>
</Switch>
</Router>
);
ReactDOM.render(
<App {...props}/>,
rootDiv
);
}
render();
render();
在此处输入JSIDLE:https://jsfiddle.net/chwsmchd/
以下是正确的方法:
const App = props => (
<Router history={browserHistory}>
<Switch>
<Route key="/login" path="/login" render={() => View(props)}/>
</Switch>
</Router>
);
const render = props => {
ReactDOM.render(
<App {...props}/>,
rootDiv
);
}
render();
render();
正确的JSIDLE:https://jsfiddle.net/gzzpmpbz/
我正在编写文本输入,并在事件中调用,因此React重新呈现我的UI。问题是文本输入总是失去焦点,所以我需要为每个字母重新聚焦:D。
问题内容: 呈现组件后,将焦点设置在特定文本字段上的反应方式是什么? 文档似乎建议使用引用,例如: 在渲染函数中的输入字段上进行设置,然后调用: 但是我应该在哪里称呼它呢?我已经尝试了几个地方,但无法正常工作。 问题答案: 您应该这样做,而不是。像这样
我有一个带有文本输入的React(15.3.2)组件。 (无论我在哪里说“渲染”,实际上都是渲染或取消隐藏;我已经尝试了两者。) 当输入元素模糊时,我使用文本输入渲染一个新组件。 我想给新的文本输入焦点。 我尝试了,,以及;我尝试了命名和函数s;我试过了。 聚焦本身是工作的,例如,一旦它被渲染,如果我点击初始输入,焦点会转移到新输入(这是一个错误,但与聚焦相比,微不足道)。 第一个输入有一个,它设
我正在使用Office Fabric UI React组件,如果用户输入逗号字符,我希望将文本输入切换为多行文本。我可以让这部分工作,但是当输入在单行和多行输入之间切换时,它会失去焦点。因此,如果在文本字段中键入并键入逗号字符,文本字段将失去焦点。我相信,当我在两者之间切换时,office fabric react中的textfield组件会重新呈现一个textarea来代替输入,而焦点将保留在替
问题内容: 呈现组件后,将焦点设置在特定文本字段上的反应是什么? 文档似乎建议使用引用,例如: 在渲染函数中的输入字段上进行设置,然后调用: 但是我应该在哪里称呼它?我已经尝试了几个地方,但无法正常工作。 问题答案: 您应该这样做,而不是。像这样
我遇到了一个奇怪的错误,我的搜索输入组件,它失去了对每个按键的关注,不知道为什么。 我还得到了一个