Javascript 反应js状态管理
Javascript 反应js状态管理,javascript,html,reactjs,react-native,state,Javascript,Html,Reactjs,React Native,State,类Todo扩展React.Component{ 建造师(道具){ 超级(道具); 此.state={ 保存文本:“”, } this.handleSaveText=this.handleSaveText.bind(this); this.displayText=this.displayText.bind(this); } handleSaveText(保存文本){ 这是我的国家({ saveText:saveText }) } render(){ 返回( ); } } 类Save.Compone
类Todo扩展React.Component{
建造师(道具){
超级(道具);
此.state={
保存文本:“”,
}
this.handleSaveText=this.handleSaveText.bind(this);
this.displayText=this.displayText.bind(this);
}
handleSaveText(保存文本){
这是我的国家({
saveText:saveText
})
}
render(){
返回(
);
}
}
类Save.Component{
建造师(道具){
超级(道具);
this.handleSaveText=this.handleSaveText.bind(this);
}
handleSaveText(e){
this.props.onSaveTextChange(即target.value);
}
render(){
报税表(
);
}
}
类显示扩展了React.Component{
render(){
var todos=[];
var todo=this.props.saveText;
//todo.push(todo);
报税表({
待办事项
}
);
}
}
ReactDOM.render(,
document.getElementById('root'))
)
您必须使用:
componentWillReceiveProps(nextProps)
在显示组件中
这是一个工作示例:
类Todo扩展React.Component{
建造师(道具){
超级(道具);
此.state={
待办事项:[]
}
this.handleSaveText=this.handleSaveText.bind(this);
}
handleSaveText(保存文本){
让todos=this.state.todos;
todos.push(保存文本);
这是我的国家({
待办事项:待办事项
});
}
render(){
返回(
);
}
}
类Save.Component{
建造师(道具){
超级(道具);
此.state={
保存文本:“”
}
this.handleSaveText=this.handleSaveText.bind(this);
this.handleChangeText=this.handleChangeText.bind(this);
}
handleChangeText(e){
this.setState({saveText:e.target.value});
}
handleSaveText(e){
this.props.onSaveText单击(this.state.saveText);
}
render(){
报税表(
);
}
}
类显示扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
待办事项:[]
}
}
组件将接收道具(下一步){
this.setState({todos:nextProps.todos});
}
render(){
让todos=this.state.todos.map((todo)=>{return{todo}});
报税表({
待办事项
}
);
}
}
ReactDOM.render(,
document.getElementById('root'))
)
这样就可以了:
class Todo extends React.Component {
constructor(props) {
super(props);
this.state = {
saveText: '',
displayText: []
}
this.handleSaveText = this.handleSaveText.bind(this);
this.displayText = this.displayText.bind(this);
}
handleSaveText(saveText) {
this.setState({
saveText: saveText
})
}
displayText(text) {
let newDisplay = this.state.displayText;
newDisplay.push(text);
this.setState({displayText: newDisplay});
}
render() {
return (
<div>
<Save saveText = {this.state.saveText}
onSaveTextChange = {this.handleSaveText}
displayText={this.displayText}
/>
<Display displayText = {this.state.displayText}
/> </div>
);
}
}
class Save extends React.Component {
constructor(props) {
super(props);
this.handleSaveText = this.handleSaveText.bind(this);
this.displayText = this.displayText.bind(this);
}
handleSaveText(e) {
this.props.onSaveTextChange(e.target.value);
}
displayText() {
this.props.displayText(this.props.saveText);
}
render() {
return ( <div>
<input type = "text"
value = {
this.props.saveText
}
onChange = {
this.handleSaveText
}
/> <input type = "button"
value = "save"
onClick = {
this.displayText
}
/> </div>
);
}
}
class Display extends React.Component {
render() {
return ( <div> {
this.props.displayText
} </div>
);
}
}
ReactDOM.render( <Todo / > ,
document.getElementById('root')
)
类Todo扩展React.Component{
建造师(道具){
超级(道具);
此.state={
保存文本:“”,
显示文本:[]
}
this.handleSaveText=this.handleSaveText.bind(this);
this.displayText=this.displayText.bind(this);
}
handleSaveText(保存文本){
这是我的国家({
saveText:saveText
})
}
显示文本(文本){
让newDisplay=this.state.displayText;
newDisplay.push(文本);
this.setState({displayText:newDisplay});
}
render(){
返回(
);
}
}
类Save.Component{
建造师(道具){
超级(道具);
this.handleSaveText=this.handleSaveText.bind(this);
this.displayText=this.displayText.bind(this);
}
handleSaveText(e){
this.props.onSaveTextChange(即target.value);
}
displayText(){
this.props.displayText(this.props.saveText);
}
render(){
报税表(
);
}
}
类显示扩展了React.Component{
render(){
报税表({
this.props.displayText
}
);
}
}
ReactDOM.render(,
document.getElementById('root'))
)
您不能在render方法中推送到阵列,因为当它再次单击按钮从您处接收到新道具时,它在重新渲染后将不再存在。我的方法将以前的响应数组保存为“displayText”,并将其发送到显示组件。请注意,此方法将整个数组显示为不带空格的单行。实际上,您希望通过执行以下操作来映射它:
this.props.displayText.map((text,idx)=>({text}))代码>这里是todo列表的工作示例
类Todo扩展React.Component{
建造师(道具){
超级(道具);
此.state={
文本:“”,
名单:[]
}
//this.handleSaveText=this.handleSaveText.bind(this);
this.addTodo=this.addTodo.bind(this);
}
handleSaveText(文本){
这是我的国家({
文本:文本
})
}
addTodo(保存文本){
var list=this.state.list;
list.push(保存文本);
这是我的国家({
列表:列表
});
//要保存到本地存储,请取消第行下方的注释
//window.localStorage.setItem('todos',list);
}
render(){
报税表(<
div>
<
保存文本={
这个是.state.text
}
onClick={
这是addTodo
}
/> <
显示列表={
这个.state.list
}
/> < /
div>
);
}
}
类Save.Component{
建造师(道具){
超级(道具);
此.state={
输入:this.props.text | |“”,
}
this.onChange=this.onChange.bind(this);
this.addtototodo=this.addToTodo.bind(this);
}
onChange(e){
这是我的国家({
输入:e.target.value
});
}
addToTodo(){
this.props.onClick(this.state.input);
这是我的国家({
输入:“”
});
}
render(){
返回(
<
输入类型=“文本”
值={
这个.state.input
}
onChange={
这是一次改变
}
/>
);
}
}
类显示扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
待办事项:[]
}
}
组件将接收道具(下一步){
这是我的国家({
待办事项:nextrops.list
});
}
render(){
var i=1;
var renderList=this.state.todos.map((名称)=>{
返回{
名称
};
});
返回({
渲染列表
});
}
}
ReactDOM.render( ,
document.getElementById('root'))
)
我在CodePe上的React项目