当前位置: 首页 > 知识库问答 >
问题:

从mapStateToProps到setState[重复]

鲁浩渺
2023-03-14

是否可以从mapStateToProps设置属性并使用setState更改状态并将该信息保存到我的数据库?数据是从谷歌图书api返回的,我想保存一小部分数据。

我的状态:

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返回未定义的

const mapStateToProps = (state) => ({
  book: state.books
 });

共有2个答案

赵炯
2023-03-14

如果要记录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);
               });
常彭薄
2023-03-14

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

查看您的代码,您只需要将您的book对象转换为较小/不同的格式。

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} />
}

我对你的流程的理解似乎是:

  1. 您调用的API提供了大量数据

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

 类似资料:
  • 这是我的pp.js loading.js: 我想从中更改的: 如何从另一个类或函数或外部访问和设置State变量?

  • 我有两个简单的带有父子关系的reactjs组件。子级包含一个带有onChange事件的输入和一个回调父级以设置状态。当我运行它时,setState似乎在父组件中工作,但传递到子组件中的道具似乎没有更新。有什么想法吗?下面是一段代码片段: 在上面的示例中,子组件中的输入值保持为“bar”,尽管在父组件中触发了,并且通过。为什么输入值不改变以反映新的状态?

  • 我是React中的一个noob,正在尝试为水相制作一个简单的应用程序,用户输入一个数字,然后根据数值显示水的状态,例如,如果他输入212,它应该是气体,12应该是固体,但由于某些原因,它没有正确显示数值,非常感谢任何帮助!!!

  • 我正在从一个文件导出常量并将其导入另一个文件,如下所示: 常数.js App.js 我希望我的初始状态是在构造函数中设置的,然后在componentWillMount上,我希望使用常量文件中的值设置状态,然后再围绕组件和流添加进一步的逻辑。 但是,我发现,我的状态没有被更新,如果我在调用setState之后记录控制台日志,状态仍然没有定义,如果我引入一个方法,需要state中的值,那么在执行堆栈的

  • 我试图在if语句中设置状态,但它不会这样做。结果,我需要从if语句中更新状态,在那个里我可以接收经度和纬度坐标,但它不会保存状态。若我在If语句之外的控制台中回显,我将只读取第一个setState值表单componentWillMount。有什么问题吗?我做错了什么?结构如下:

  • 问题内容: 我正在尝试了解react-redux的connect方法及其作为参数的功能。特别是。 以我的理解,它的返回值将是一个从状态派生的对象(因为它存在于商店中),其键将作为道具传递给目标组件(应用了connect的组件)。 这意味着目标组件所消耗的状态与存储在商店中的状态可能具有截然不同的结构。 问:可以吗? 问:这是预期的吗? 问:这是反模式吗? 问题答案: 问: 答:是的 问: 是的,这