reactjs - React + Styled Components:每次渲染 setState 都会重置所有组件
问题描述
我偶然发现了一个使用 React + Styled Components 的惊人之谜。我完全不知所措。
这是我的组件:
import React from 'react';
import styled from "styled-components";
class SearchBar extends React.Component {
constructor(props) {
super(props);
this.state = {
searchStr: '',
isEditing: false,
isSearching: false,
isIdle: true,
activeMode: 'search'
};
}
onChange=(e)=>{
console.log("on change input");
this.setState( {
...this.state
}, () => {
// nada...
});
};
render () {
const SearchBarStyle = styled.div`
height: 85%;
`;
return (
<SearchBarStyle>
<input type="text" onChange={this.onChange} placeholder="Search"/>
</SearchBarStyle>
);
}
}
export default SearchBar;
问题是这样的:只要我开始输入input
,setState
就会被调用。当这种情况发生时,一切<SearchBarStyle>
都会重置!我的第一个输入字符被删除,输入控件从头开始,显示占位符提示......
令人费解的东西来了:
如果我<SearchBarStyle>
用简单的div
OR替换,我永远不会调用setState
问题不会发生。我可以自由打字……不知何故,调用setState
一个使用 styled-components 构建的组件会完全重置它!
威士忌探戈狐步舞!?
解决方案
检查此代码
问题 #1。未设置输入值。输入元素应该是
<input
value={this.state.searchStr}
type="text"
onChange={this.onChange}
placeholder="Search"
/>
问题 #2。目标输入值未在状态中设置,您的 onChange 处理程序应该是
onChange = e => {
this.setState({ searchStr: e.target.value });
};
推荐阅读
- node.js - Node.js SSE res.write() 不在流中发送数据
- python - 为什么程序多次运行时python的set对象中元素的顺序会发生变化
- python - 由于权限问题而更改缓存目录
- git - Pip 安装修改后的 MLflow 分叉
- r - 使用 ggplot 创建多个变量的组合条形图
- python - 将自定义函数应用于大型列表需要很长时间
- c - 当我必须退回内存块时如何释放它?
- kubernetes - Kubernetes 入口是否支持通配符域?
- python - 错误:SECRET_KEY 设置不能为空 - Django webdev
- java - Java - 有序映射