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项目