fix: 🐛 schema 中没有 state 的定义, 出码后的 Rax/React 组件应有个默认的空的 state

This commit is contained in:
牧毅 2020-11-12 20:48:30 +08:00
parent c8cde85201
commit 7e37f8dd16
4 changed files with 48 additions and 49 deletions

View File

@ -32,33 +32,31 @@ const pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) =>
const ir = next.ir as IContainerInfo; const ir = next.ir as IContainerInfo;
const scope = Scope.createRootScope(); const scope = Scope.createRootScope();
if (ir.state) { const state = ir.state || {};
const state = ir.state; const fields = Object.keys(state).map<string>((stateName) => {
const fields = Object.keys(state).map<string>((stateName) => { // TODO: 这里用什么 handlers?
// TODO: 这里用什么 handlers? const value = generateCompositeType(state[stateName], scope);
const value = generateCompositeType(state[stateName], scope); return `${stateName}: ${value}`;
return `${stateName}: ${value}`; });
});
if (cfg.implementType === 'inConstructor') { if (cfg.implementType === 'inConstructor') {
next.chunks.push({ next.chunks.push({
type: ChunkType.STRING, type: ChunkType.STRING,
fileType: cfg.fileType, fileType: cfg.fileType,
name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent, name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,
content: `this.state = { ${fields.join(',')} };`, content: `this.state = { ${fields.join(',')} };`,
linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]], linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],
}); });
} else if (cfg.implementType === 'insMember') { } else if (cfg.implementType === 'insMember') {
next.chunks.push({ next.chunks.push({
type: ChunkType.STRING, type: ChunkType.STRING,
fileType: cfg.fileType, fileType: cfg.fileType,
name: CLASS_DEFINE_CHUNK_NAME.InsVar, name: CLASS_DEFINE_CHUNK_NAME.InsVar,
content: `state = { ${fields.join(',')} };`, content: `state = { ${fields.join(',')} };`,
linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]], linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],
}); });
}
// TODO: hooks state??
} }
// TODO: hooks state??
return next; return next;
}; };

View File

@ -32,32 +32,29 @@ const pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) =>
const ir = next.ir as IContainerInfo; const ir = next.ir as IContainerInfo;
const scope = Scope.createRootScope(); const scope = Scope.createRootScope();
if (ir.state) { const state = ir.state || {};
const { state } = ir; const fields = Object.keys(state).map<string>((stateName) => {
const fields = Object.keys(state).map<string>((stateName) => { const value = generateCompositeType(state[stateName], scope);
const value = generateCompositeType(state[stateName], scope); return `${stateName}: ${value},`;
return `${stateName}: ${value},`; });
if (cfg.implementType === 'inConstructor') {
next.chunks.push({
type: ChunkType.STRING,
fileType: cfg.fileType,
name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,
content: `this.state = { ${fields.join('')} };`,
linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],
});
} else if (cfg.implementType === 'insMember') {
next.chunks.push({
type: ChunkType.STRING,
fileType: cfg.fileType,
name: CLASS_DEFINE_CHUNK_NAME.InsVar,
content: `state = { ${fields.join('')} };`,
linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],
}); });
if (cfg.implementType === 'inConstructor') {
next.chunks.push({
type: ChunkType.STRING,
fileType: cfg.fileType,
name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,
content: `this.state = { ${fields.join('')} };`,
linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],
});
} else if (cfg.implementType === 'insMember') {
next.chunks.push({
type: ChunkType.STRING,
fileType: cfg.fileType,
name: CLASS_DEFINE_CHUNK_NAME.InsVar,
content: `state = { ${fields.join('')} };`,
linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],
});
}
} }
return next; return next;
}; };
return plugin; return plugin;

View File

@ -20,6 +20,8 @@ import __$$projectUtils from '../../utils';
import './index.css'; import './index.css';
class Home$$Page extends Component { class Home$$Page extends Component {
state = {};
_methods = this._defineMethods(); _methods = this._defineMethods();
_context = this._createContext(); _context = this._createContext();

View File

@ -20,6 +20,8 @@ import __$$projectUtils from '../../utils';
import './index.css'; import './index.css';
class Home$$Page extends Component { class Home$$Page extends Component {
state = {};
_methods = this._defineMethods(); _methods = this._defineMethods();
_context = this._createContext(); _context = this._createContext();