javascript - 如何将按钮添加到无状态组件中?

标签 javascript node.js reactjs ecmascript-6 stateless

好的,

这个问题很简单,但我在这里花了几个小时试图弄清楚如何解决这个问题。

首先,我正在做React类(class),并且我已经第二次提交了该项目以供审稿人审核。当然不是同一个审稿人,他/她要求我进行与之前不同的其他修改。

事实是,该组件工作正常,但审阅者建议我将类组件转换为函数组件,这就是我的问题开始的地方。

请,我道歉,但我必须放置整个无状态组件代码(我认为有点大),来解释接下来发生的事情:


import React from 'react';

import { Link } from 'react-router-dom';

import Book from './Book';



function Home (props) {

  return (

    <div className='list-books'>

      <div className='list-books-title'>

        <h1>MyReads</h1>

      </div>

      <div className='list-books-content'>

        <div>

          <div className='bookshelf'>

            <h2 className='bookshelf-title'>Currently Reading</h2>

            <div className='bookshelf-books'>

              <ol className='books-grid'>

              {

                  props.books

                    .filter(book => book.shelf === 'currentlyReading')

                    .map(book => (

                      <li key={book.id} >

                        <Book 

                          book={book}

                          changeShelf={props.changeShelf}

                          actualShelf='currentlyReading'

                        />

                      </li>

                    ))

                }

              </ol>

            </div>

          </div>

          <div className='bookshelf'>

            <h2 className='bookshelf-title'>Want to Read</h2>

            <div className='bookshelf-books'>

              <ol className='books-grid'>

                {

                  props.books

                    .filter(book => book.shelf === 'wantToRead')

                    .map(book => (

                      <li key={book.id} >

                        <Book 

                          book={book}

                          changeShelf={props.changeShelf}

                          actualShelf='wantToRead'

                        />

                      </li>

                    ))

                }   

              </ol>

            </div>

          </div>

          <div className='bookshelf'>

            <h2 className='bookshelf-title'>Read</h2>

            <div className='bookshelf-books'>

              <ol className='books-grid'>

              {

                  props.books

                    .filter(book => book.shelf === 'read')

                    .map(book => (

                      <li key={book.id} >

                        <Book 

                          book={book}

                          changeShelf={props.changeShelf}

                          actualShelf='read'

                        />

                      </li>

                    ))

                }

              </ol>

            </div>

          </div>

        </div>

      </div>

      <div className='open-search'>

        <Link to='/search'>

          <button onClick={() => this.setState({ showSearchPage: true })}>

            Add a book

          </button>

        </Link>

      </div> 

    </div>  

  );

}  


export default Home;

正如我所说,当组件是类组件时,一切正常,但是当我将其转换为函数组件时,按钮渲染时出现错误(第 78 行,最后一行之一) ,在我看来,错误如下:

onClick error

任何人都可以帮助我弄清楚如何将按钮添加到无状态组件中?

我想 setState 可能需要做一些事情,我真的不知道。

提前致谢。

最佳答案

如果你想使用showSeachPage的值,直接使用变量“showSearchPage”而不是state.showSearchPage。这里这个变量的默认值为 false。如果您想查看文档 https://reactjs.org/docs/hooks-intro.html

import React, { useState } from 'react';

import { Link } from 'react-router-dom';

import Book from './Book';



function Home (props) {

const [showSearchPage, setShowSearchPage] = useState(false);

  return (

    <div className='list-books'>

      <div className='list-books-title'>

        <h1>MyReads</h1>

      </div>

      <div className='list-books-content'>

        <div>

          <div className='bookshelf'>

            <h2 className='bookshelf-title'>Currently Reading</h2>

            <div className='bookshelf-books'>

              <ol className='books-grid'>

              {

                  props.books

                    .filter(book => book.shelf === 'currentlyReading')

                    .map(book => (

                      <li key={book.id} >

                        <Book 

                          book={book}

                          changeShelf={props.changeShelf}

                          actualShelf='currentlyReading'

                        />

                      </li>

                    ))

                }

              </ol>

            </div>

          </div>

          <div className='bookshelf'>

            <h2 className='bookshelf-title'>Want to Read</h2>

            <div className='bookshelf-books'>

              <ol className='books-grid'>

                {

                  props.books

                    .filter(book => book.shelf === 'wantToRead')

                    .map(book => (

                      <li key={book.id} >

                        <Book 

                          book={book}

                          changeShelf={props.changeShelf}

                          actualShelf='wantToRead'

                        />

                      </li>

                    ))

                }   

              </ol>

            </div>

          </div>

          <div className='bookshelf'>

            <h2 className='bookshelf-title'>Read</h2>

            <div className='bookshelf-books'>

              <ol className='books-grid'>

              {

                  props.books

                    .filter(book => book.shelf === 'read')

                    .map(book => (

                      <li key={book.id} >

                        <Book 

                          book={book}

                          changeShelf={props.changeShelf}

                          actualShelf='read'

                        />

                      </li>

                    ))

                }

              </ol>

            </div>

          </div>

        </div>

      </div>

      <div className='open-search'>

        <Link to='/search'>

          <button onClick={() => setShowSearchPage(true)}>

            Add a book

          </button>

        </Link>

      </div> 

    </div>  

  );

}  


export default Home;

关于javascript - 如何将按钮添加到无状态组件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885321/

相关文章:

javascript - 全局变量不起作用

javascript - 带有 Mobx 的 React-Router 中间件

javascript - 不允许在对象中设置新的或未声明的属性

mysql - 如何使用 MySQL 数据库在数据更改时发送更新?

node.js - NodeJS 服务器使用多线程吗?

javascript - 表单的样式组件

javascript - 没有目标的 HREF 链接,不想使用 hash 或 void(0)

javascript - 从菜单Electron.js调用其他文件上的函数

javascript - Cypress - 拖放在基于 react 的网站上不起作用

javascript - 在reactjs中消除项目的问题