我是反应原生的新手,并为我的应用程序使用realm数据库。我想通过json预先填充我的数据。我尝试使用componentDidMount()函数并使用for循环来插入数据。任何指导都会有所帮助。
以下是我的代码:
//架构文件:
function my_function($args)
{
// ...
// Code that creates the $result variable
// ..
// Execute the calback function, how??:
$args['callback_function']; // Handle the $result
}
$args = array(
'callback_function' => function($result)
{
// $result created in my_function()
}
);
my_function($args);
//在我的索引文件中,名为componentDidMount:
import booksdata from './books.json';
const Realm = require('realm');
const BooksSchema = {
name: 'Books',
primaryKey: 'id',
properties: {
id: 'int', // primary key
name: 'string',
author: 'string',
publisher: 'string',
},
};
const databaseSchema = {
path: 'books.realm',
schema: [BooksSchema],
schemaVersion: 0, // optional
};
export const mountData = () => new Promise((resolve, reject) => {
Realm.open(databaseSchema)
.then((realm) => {
// Create Realm objects and write to local storage
realm.write(() => {
booksdata.forEach(obj => realm.create(databaseSchema, {
id: Math.floor(Date.now() / 1000),
name: obj.name,
author: obj.author,
publisher: obj.publisher,
}));
});
});
});
//我收到了警告
componentDidMount() {
mountData().then().catch((error) => {
alert(`Insert error ${error}`);
});
}
答案 0 :(得分:1)
您可以将JSON数据解析为JavaScript对象,但对象必须与您的架构匹配。
let objs = JSON.parse(data);
realm.write(() => {
objs.forEach((obj) => realm.create('data', obj));
}
其中'data'
是架构的名称。
答案 1 :(得分:0)
谢谢你们! 我犯了一个非常愚蠢的错误。在我的模式文件中,当我在领域中插入记录时,我没有传递我的模式的名称。而不是databaseSchema我应该传递模式的名称,即BooksSchema.name(Books)
export const mountData = () => new Promise((resolve, reject) => {
Realm.open(databaseSchema)
.then((realm) => {
// Create Realm objects and write to local storage
realm.write(() => {
booksdata.forEach(obj => realm.create(BooksSchema.name, {
id: Math.floor(Date.now() / 1000),
name: obj.name,
author: obj.author,
publisher: obj.publisher,
}));
});
});
});