/* =========================================================
英文解釈ラボ — app (React, mounts #app)
========================================================= */
const { useState, useMemo } = React;
const K = window.KAISHAKU;
const R = K.roles;
/* ---------- shared bits ---------- */
function RoleChip({ role, sub, big }) {
const m = R[role];
return (
{m.key}{sub ? ·{sub} : null}
{m.jp}
);
}
function Legend() {
return (
{Object.values(R).map(m => (
{m.key}
{m.jp}
))}
);
}
function TypeBadge({ s }) {
return (
{s.typeJp}
{s.type.split('').join(' ')}
);
}
/* ---------- INTERACTIVE ---------- */
function Interactive() {
const [si, setSi] = useState(0);
const [show, setShow] = useState(false);
const [sel, setSel] = useState(null);
const [trans, setTrans] = useState(false);
const s = K.sentences[si];
function pick(i) { setSi(i); setSel(null); setShow(false); setTrans(false); }
const active = sel != null ? s.chunks[sel] : null;
return (
語句をクリックして、文の骨格を体感する。
英文をタップすると、それぞれの語句が文の中で果たす役割(SVOC)と訳が浮かび上がります。「構造を表示」で全体の設計図を一気に確認。
{K.sentences.map((x, i) => (
))}
{s.chunks.map((c, i) => {
const m = R[c.role];
const on = sel === i;
const reveal = show || on;
return (
);
})}
{trans &&
{s.jp}
}
{active ? (
{active.text}
{active.jp}
{active.note}
) : (
語句をクリックすると、役割・訳・解説が表示されます。
)}
);
}
/* ---------- ARTICLE ---------- */
function Article() {
const [si, setSi] = useState(0);
const s = K.sentences[si];
return (
例文を構造で色分けして、一文を分解する。
骨格(SVOC)を色で示し、語句ごとに「訳」と「文法の理由」を順に読み解く記事形式。じっくり腰を据えて理解したい人へ。
{K.sentences.map((x, i) => (
))}
{s.chunks.map((c, i) => {
const m = R[c.role];
return (
{m.key}{c.sub?'·'+c.sub:''}
{c.text}
);
})}
{s.jp}
語句ごとの読み解き
{s.chunks.map((c, i) => (
{c.text} — {c.jp}
{c.note}
))}
);
}
/* ---------- QUIZ ---------- */
function Quiz() {
const [qi, setQi] = useState(0);
const [ans, setAns] = useState(null);
const q = K.quizzes[qi];
const answered = ans != null;
function choose(id) { if (!answered) setAns(id); }
function next() { setQi((qi + 1) % K.quizzes.length); setAns(null); }
function reset() { setAns(null); }
return (
なぜ「その選択肢」が正解か?
複雑に見える問題も、文の型と品詞の役割で仕分ければ、正解の根拠が明確になります。選んでから理由を確認しましょう。
{K.quizzes.map((_, i) => (
))}
Q{qi + 1} / {K.quizzes.length}
{q.stemBefore && {q.stemBefore} }
{answered ? K.quizzes[qi].choices.find(c=>c.correct).word : '_____'}
{q.stemAfter}
Q.{q.prompt}
{q.typeHint}
{q.choices.map(c => {
let cls = 'choice';
if (answered) {
if (c.correct) cls += ' correct';
else if (c.id === ans) cls += ' wrong';
else cls += ' dim';
}
return (
);
})}
{answered && (
解説
{q.explain}
)}
);
}
/* ---------- APP ---------- */
const MODES = [
{ key: 'interactive', label: 'インタラクティブ', sub: 'クリックで構造を体感' },
{ key: 'article', label: '記事型', sub: '色分けで一文を分解' },
{ key: 'quiz', label: 'クイズ型', sub: '4択で根拠を確認' },
];
function App() {
const [mode, setMode] = useState('interactive');
return (
英文解釈ラボ
英語は「単語」ではなく
「構造」で読む。
文の型(5文型)と品詞の役割が見えれば、長い一文もパズルのように明快になる。3つのモードで、構造で読む力を鍛えるトレーニングページです。
{MODES.map(m => (
))}
{mode === 'interactive' && }
{mode === 'article' && }
{mode === 'quiz' && }
TOEIC Business Training
「読み流す」から卒業し、
理詰めで解く快感を。
🔗 無料トライアルはこちら
biz-toeic990.com
);
}
ReactDOM.createRoot(document.getElementById('app')).render();