首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在<ul>中打印列表

在<ul>中打印列表
EN

Stack Overflow用户
提问于 2018-05-28 11:40:16
回答 2查看 68关注 0票数 -1

我想打印一个新的<li>电影的<ul>列表。

我没有看到任何列表或元素。

我还收到了一个警告:

index.js:2178警告:组件正在更改要控制的文本类型的非受控输入。输入元素不应该从非受控切换到受控(反之亦然)。决定在组件的生命周期中使用受控还是非受控的输入元素。更多信息:https://reactjs.org/docs/forms.html#controlled-components

在输入中(在index.js:54)

在标签中(在index.js:52)

在表格中(在index.js:51)

在div中(在index.js:50中)

在电影中(在index.js:70)

这是我的代码:

class Movie extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: '',
                  list: [],
                  checked: true
                 };

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
    this.addMovie = this.addMovie.bind(this);
    this.listMovies = this.listMovies.bind(this);
  }

  handleChange(event) {
    const target = event.target;
    const value = target.type === 'checkbox' ? target.checked : target.value;
    const name = target.name;

    this.setState({
      [name]: value
    });

  }

  handleSubmit(event) {
    event.preventDefault();
    this.addMovie();
  }

  addMovie(value){
    this.setState({ list: [...this.state.list, value] });
    console.log(...this.state.list);
  }

  listMovies(){
    return(
      <ul>
        {this.state.list.map((item) => <li key={this.state.value}>{this.state.value}</li>)}
      </ul>
    );
  }

  render() {
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <label>
            Movie name:
            <input name="movieName" type="text" value={this.state.movieName} onChange={this.handleChange} />
            Favorite?
            <input name="favorite" type="checkbox" checked={this.state.favorite} onChange={this.handleChange} />
          </label>
          <input type="submit" value="Submit" />
        </form>

        <button onClick={this.listMovies}>
          List Movies
        </button>
      </div>
    );
  }
}

ReactDOM.render(
  <Movie />,
  document.getElementById('root')
);

我真的想只打印我最喜欢的电影

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-28 13:08:05

我猜你想要一个简单的带有最爱的电影列表。不是最好的,但可以工作的代码:

import React from 'react';
import { render } from 'react-dom';

class App extends React.Component {
     state = {
      favorite: false,
      movieName: "",
      movies: [],
      filter: true,
    };

  handleChange = (event) =>
    event.target.name === "favorite"
      ? this.setState({ [event.target.name]: event.target.checked })
      : this.setState( { [ event.target.name]: event.target.value } );

  handleSubmit = ( event ) => {
    event.preventDefault();
    this.setState({
      movies: [...this.state.movies, {name: this.state.movieName, favorite: this.state.favorite }]
    });
  }

  listFavoriteMovies = () => (
      <ul>
        {this.state.movies
        .filter( movie => movie.favorite )
        .map( movie => <li>{movie.name}</li>)}
      </ul>
    );

    listAllMovies = () => (
      <ul>
        {this.state.movies
          .map(movie => <li>{movie.name}</li>)}
      </ul>
    );

  changeFilter = () =>
    this.setState( prevState => ( {
      filter: !prevState.filter,
    }))


  render() {
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <label>
            Movie name:
            <input name="movieName" type="text" onChange={this.handleChange} />
            Favorite?
            <input name="favorite" type="checkbox" onChange={this.handleChange} />
          </label>
          <input type="submit" value="Submit" />
        </form>
        <p>Showing only favorite movies.</p>
        <ul>
          {
            this.state.filter
            ? this.listFavoriteMovies()
            : this.listAllMovies()
            }
        </ul>
        <button onClick={this.changeFilter}>Click toggle for all/favorites.</button>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));
票数 1
EN

Stack Overflow用户

发布于 2018-05-28 11:50:43

如果您最初将undefined或null作为值传递给prop,组件将作为“非受控”组件开始生命。一旦您与组件进行交互,我们将设置一个值,react将其更改为“受控”组件,并发出警告。

在您的代码中,在您所在的状态下初始化movieName以消除警告。

有关更多信息,请查看here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50558808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档