Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 从MapStateTops到setState_Reactjs_React Redux - Fatal编程技术网

Reactjs 从MapStateTops到setState

Reactjs 从MapStateTops到setState,reactjs,react-redux,Reactjs,React Redux,是否可以从MapStateTops设置属性,并使用setState更改状态并将该信息保存到我的数据库中?数据是从GoogleBooksAPI返回的,我想保存一小部分数据 我国: state = { title: '', subtitle: '', authors: '', description: '', thumbnail: '', buyLink: '' }; 函数设置状态并保存到数据库 let { book } = this.props.b

是否可以从MapStateTops设置属性,并使用setState更改状态并将该信息保存到我的数据库中?数据是从GoogleBooksAPI返回的,我想保存一小部分数据

我国:

state = {
    title: '',
    subtitle: '',
    authors: '',
    description: '',
    thumbnail: '',
    buyLink: ''
};
函数设置状态并保存到数据库

let { book } = this.props.book;

    let bookInfo;

    if (book !== null) {
        const onSave = (e) => {
            e.preventDefault();
        let savedData = this.setState({
                title: book.volumeInfo.title,
                subtitle: book.volumeInfo.subtitle,
                authors: book.volumeInfo.authors,
                description: book.volumeInfo.description,
                thumbnail: book.volumeInfo.imageLinks.thumbnail,
                buyLink: book.saleInfo.buyLink
            });
            console.log(savedData);
        };
        // this.props.saveBook(savedData, this.props.history);
        bookInfo = <BookInfo book={book} onClick={onSave} />;
    }

如果要记录savedData,需要使用setState回调,如下所示:

 this.setState({
                title: book.volumeInfo.title,
                subtitle: book.volumeInfo.subtitle,
                authors: book.volumeInfo.authors,
                description: book.volumeInfo.description,
                thumbnail: book.volumeInfo.imageLinks.thumbnail,
                buyLink: book.saleInfo.buyLink
            }, ()=>{
                  console.log(this.state)
                 this.props.saveBook(this.state, this.props.history);
               });

如果要记录savedData,需要使用setState回调,如下所示:

 this.setState({
                title: book.volumeInfo.title,
                subtitle: book.volumeInfo.subtitle,
                authors: book.volumeInfo.authors,
                description: book.volumeInfo.description,
                thumbnail: book.volumeInfo.imageLinks.thumbnail,
                buyLink: book.saleInfo.buyLink
            }, ()=>{
                  console.log(this.state)
                 this.props.saveBook(this.state, this.props.history);
               });

为了
将内容保存到数据库中,您根本不需要调用
setState()
。状态和道具只是React用来管理数据和和数据交互的机制(这是一种过于粗俗的简化)

查看代码,只需将
书籍
对象转换为更小/不同的格式

saveData = () => {
    // The code below just shows intention and shouldn't be used as is.
    let book = this.props.book
    let bookToSave = {
            title: book.volumeInfo.title,
            subtitle: book.volumeInfo.subtitle,
            authors: book.volumeInfo.authors,
            description: book.volumeInfo.description,
            thumbnail: book.volumeInfo.imageLinks.thumbnail,
            buyLink: book.saleInfo.buyLink
        }
    this.props.save(bookToSave, this.props.history);
}
render() {
    <BookInfo book={this.props.book} onSave={this.saveData} />
}
saveData=()=>{
//下面的代码只是表示意图,不应按原样使用。
let book=这个.props.book
让bookToSave={
标题:book.volumeInfo.title,
副标题:book.volumeInfo.subtitle,
作者:book.volumeInfo.authors,
description:book.volumeInfo.description,
缩略图:book.volumeInfo.imageLinks.缩略图,
buyLink:book.saleInfo.buyLink
}
this.props.save(bookToSave,this.props.history);
}
render(){
}
我对您的流程的理解似乎是:

  • 您调用了一个API,该API为您提供了大量数据
  • 您可以在屏幕上显示此数据
  • 您允许用户保存它

  • 基于上述情况,我认为你没有必要把这本书复制到一种状态

    为了
    将内容保存到数据库中,您根本不需要调用
    setState()
    。状态和道具只是React用来管理数据和和数据交互的机制(这是一种过于粗俗的简化)

    查看代码,只需将
    书籍
    对象转换为更小/不同的格式

    saveData = () => {
        // The code below just shows intention and shouldn't be used as is.
        let book = this.props.book
        let bookToSave = {
                title: book.volumeInfo.title,
                subtitle: book.volumeInfo.subtitle,
                authors: book.volumeInfo.authors,
                description: book.volumeInfo.description,
                thumbnail: book.volumeInfo.imageLinks.thumbnail,
                buyLink: book.saleInfo.buyLink
            }
        this.props.save(bookToSave, this.props.history);
    }
    render() {
        <BookInfo book={this.props.book} onSave={this.saveData} />
    }
    
    saveData=()=>{
    //下面的代码只是表示意图,不应按原样使用。
    let book=这个.props.book
    让bookToSave={
    标题:book.volumeInfo.title,
    副标题:book.volumeInfo.subtitle,
    作者:book.volumeInfo.authors,
    description:book.volumeInfo.description,
    缩略图:book.volumeInfo.imageLinks.缩略图,
    buyLink:book.saleInfo.buyLink
    }
    this.props.save(bookToSave,this.props.history);
    }
    render(){
    }
    
    我对您的流程的理解似乎是:

  • 您调用了一个API,该API为您提供了大量数据
  • 您可以在屏幕上显示此数据
  • 您允许用户保存它
  • 基于上述情况,我认为你没有必要把这本书复制到一种状态

    因为
    this.setState()
    不返回任何内容。不管你想从中得到什么,你都不会,因为setState()不会给你:)因为
    this.setState()
    不会返回任何东西。无论您想从中获取什么—您都不会,因为setState()不会将其提供给您:)