【问题标题】:Passing a state to another component so I can render a list?将状态传递给另一个组件以便我可以呈现列表?
【发布时间】:2021-06-14 01:25:27
【问题描述】:

我正在尝试呈现一个列表,我正在一个类中做我的中心组件,并且我想使用一个表单和一些输入来设置类的状态,以便我可以使用这些值来呈现一个列表元素,但它是不工作,我什至无法在点击后记录状态的属性,我怎样才能设法在输入上使用这些值来呈现列表元素?我应该改用钩子吗?

class TASKMANAGER extends Component {
    constructor(props){
        super(props);
        this.state= {
            name: "",
            description:"",
            priority: "urgent",
        }
        
    
    }

     
    

    handleTitleChange = event => {
        this.setState( {
            name: event.target.value
        })
        };

    handleDescriptionChange = event => {
        this.setState({
            description: event.target.value
        })
        };

    handlePriorityChange = event => {
        this.setState({
            priority: event.target.value
        })
        };
        
    
    handleClick() {
            console.log(this.state);
        }
            

    

    render() {

        return (
            <div>
             <div className= 'task-form'>  
            <form>
                <div>
                    <label>Name your task!</label>
                    <input type= 'text' id='task-title' value={this.state.name} onChange={this.handleTitleChange} />
                </div>
                <div>
                    <label>Description?</label>
                    <textarea id='description' value={this.state.description} onChange={this.handleDescriptionChange}/>
                </div>
                <div>
                    <label>Priority?</label>
                    <select value={this.state.priority} onChange={this.handlePriorityChange}>
                        <option value='urgent'>Urgent</option>
                        <option value='regular'>Regular</option>
                        <option value='Can wait'>Can wait</option>
                    </select>    
                </div>
                <button onClick={this.handleClick}>PRESS</button>
            </form> 
            </div>
            <div className='list-items'>
                <ul>
                
                </ul>
            </div>
            </div>   
            )
    }}

【问题讨论】:

    标签: reactjs event-handling react-props setstate react-component


    【解决方案1】:

    您的 [PRESS] 按钮将触发表单提交事件,默认情况下会刷新页面。
    ? 你的日志代码永远不会被看到。

    您的代码几乎没问题。
    只需在 handleClick() 函数中添加 preventDefault() 即可。

        handleClick = (event) => {
            event.preventDefault();
            console.log(this.state);
        }
    

    【讨论】:

      【解决方案2】:

      我已经编辑了您的代码并删除了表单提交事件,因为即使没有表单提交,您也可以将列表存储在状态中以在同一页面中呈现列表

        class App extends Component {
         constructor(props) {
          super(props);
          this.state = {
           name: "",
           description: "",
           priority: "urgent",
           list: [] // added the list to add above values
          };
        }
       .......
       ........
      handleClick = (event) => {
       this.setState((state) => {
        const list = [
          ...state.list,
          {
            name: state.name,
            description: state.description,
            priority: state.priority
          }
        ];
        return {
          list
        };
       });
      

      };

      在渲染中,显示为列表

      render() {
       return (
        <div>
          .....
          .....
            </div>
            <button onClick={this.handleClick}>PRESS</button>
           </div>
          <div className="list-items">
            <ul>
              {this.state.list.map((list, index) => (
                <p key={index}>
                  Name: {list.name} || Description: {list.description} ||
                  priority: {list.priority}
                </p>
              ))}
            </ul>
          </div>
        </div>
      );
      }
      }
      

      【讨论】:

      • 谢谢,我尝试了你给它的代码,但它没有渲染,我基本上实现了类似的东西,只是 handleClick 是 state.list 的推送方法和包含列表的变量元素在渲染方法中,它现在正在工作,但是当我按下按钮时它不会渲染,我需要从输入中删除一个字符才能渲染,你知道可以吗?
      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2017-11-07
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      相关资源
      最近更新 更多