// pages.jsx — トップページ・一覧ページ・絞り込みパネル const { useState: useStateP, useMemo: useMemoP } = React; // トップページに内包する読み物コンテンツ const EATING_TIPS = [ { t: "そのまま", body: "封を開けてそのまま。素材本来の甘みと、ねっとり・もっちりの食感をいちばんシンプルに楽しめます。" }, { t: "炙る", body: "トースターやグリルで両面を1〜2分。香ばしさが立ち、表面はカリッ、中はとろける食感に変わります。" }, { t: "バター焼き", body: "フライパンに少量のバターで焼くと、塩気と甘みが絶妙。おやつにもおつまみにもおすすめです。" }, { t: "アレンジ", body: "刻んでヨーグルトやアイスに、天ぷらや炊き込みご飯の具にも。料理の素材としても優秀です。" }, ]; const STORAGE_TIPS = [ { t: "常温", body: "未開封なら直射日光を避けた涼しい場所で。表示の賞味期限内に食べきりましょう。" }, { t: "冷蔵", body: "開封後は乾燥を防ぐため密閉して冷蔵庫へ。固くなったらレンジや炙りで温めると食感が戻ります。" }, { t: "冷凍", body: "長期保存は小分けして冷凍が便利。半解凍ならアイス感覚、しっかり解凍でしっとり食感に。" }, ]; // ===== 絞り込みパネル ===== function FilterPanel({ filters, setFilters, counts, onClose }) { const toggle = (key, id) => { setFilters((f) => { const cur = f[key] || []; const arr = cur.includes(id) ? cur.filter((x) => x !== id) : [...cur, id]; return { ...f, [key]: arr }; }); }; const setPrice = (id) => setFilters((f) => ({ ...f, price: f.price === id ? null : id })); const setRating = (id) => setFilters((f) => ({ ...f, minRating: f.minRating === id ? null : id })); const clearAll = () => setFilters({ variety: [], origin: [], shape: [], hardness: [], maker: [], tag: [], price: null, minRating: null }); const hasAny = filters.variety.length || (filters.origin || []).length || filters.shape.length || filters.hardness.length || filters.maker.length || filters.tag.length || filters.price || filters.minRating; const PRICE_BANDS = [ { id: "a", label: "〜1,000円", test: (p) => p.price < 1000 }, { id: "b", label: "1,000〜1,500円", test: (p) => p.price >= 1000 && p.price < 1500 }, { id: "c", label: "1,500〜2,000円", test: (p) => p.price >= 1500 && p.price < 2000 }, { id: "d", label: "2,000円〜", test: (p) => p.price >= 2000 }, ]; const TAGS = ["無添加", "国産", "ギフト", "個包装", "大容量", "訳あり", "希少"]; const Opt = ({ on, onClick, name, cnt, radio }) => (
{on && } {name} {cnt != null && {cnt}}
); return (
絞り込み {hasAny ? すべて解除 : 条件で探す}
芋の品種
{VARIETIES.map((v) => ( toggle("variety", v.id)} name={v.name} cnt={counts.variety[v.id] || 0} /> ))}
形状
{SHAPES.map((s) => ( toggle("shape", s.id)} name={s.name} cnt={counts.shape[s.id] || 0} /> ))}
原料産地
{(window.ORIGINS || []).map((o) => ( toggle("origin", o.id)} name={o.name} cnt={(counts.origin || {})[o.id] || 0} /> ))}
硬さ
{HARDNESS.map((h) => ( toggle("hardness", h.id)} name={h.name} cnt={counts.hardness[h.id] || 0} /> ))}
メーカー・産地
{MAKERS.map((m) => ( toggle("maker", m.id)} name={m.name} cnt={counts.maker[m.id] || 0} /> ))}
価格帯
{PRICE_BANDS.map((b) => ( setPrice(b.id)} name={b.label} /> ))}
評価
{[4.5, 4.0, 3.5].map((r) => ( setRating(r)} name={`★ ${r.toFixed(1)} 以上`} /> ))}
こだわり
{TAGS.map((t) => ( toggle("tag", t)} name={t} /> ))}
{onClose && (
)}
); } // ===== トップページ ===== function TopPage({ onGoList, onOpen }) { const top = [...PRODUCTS].sort((a, b) => a.rank - b.rank).slice(0, 8); const totalReviews = PRODUCTS.reduce((s, p) => s + ((p.reviews || []).length), 0); // ヒーロー=最新登録の商品(_seq が小さいほど新しい。無ければ人気No.1) const hero = [...PRODUCTS].sort((a, b) => ((a._seq != null ? a._seq : 999) - (b._seq != null ? b._seq : 999)) || (a.rank - b.rank))[0]; const isNew = hero && hero._seq != null; return (
{/* ヒーロー */}
国内の干し芋を、まとめて比較

あなた好みの
干し芋が、きっと見つかる。

品種・形状・メーカーで絞り込み、甘さや味わいのスコアとレビューを見比べて選べる、 干し芋の比較・レビューサイトです。

{PRODUCTS.length}
掲載商品
{MAKERS.length}
メーカー
{VARIETIES.length}
品種
{totalReviews}
実食レビュー
hero && onOpen(hero)} style={{ cursor: hero ? "pointer" : "default" }}> {hero ? : } {hero && (
{isNew ? "新着ピックアップ" : "今週の人気No.1"}
{hero.name}
)}
{/* 品種から探す(品種ガイド兼用) */}
BY VARIETY芋の品種ガイド
{VARIETIES.map((v) => { const cnt = PRODUCTS.filter((p) => p.variety === v.id).length; return (
onGoList({ variety: [v.id] })}>
{v.name}
{v.note}
{cnt} 商品
); })}
{/* 形状から探す */}
BY SHAPE形状から探す
{SHAPES.map((s) => { const cnt = PRODUCTS.filter((p) => p.shape === s.id).length; return (
onGoList({ shape: [s.id] })}>
{s.name}
{s.note}
{cnt} 商品
); })}
{/* 人気ランキング */}
RANKING人気ランキング
{top.map((p) => (
{p.rank}
))}
{/* 健康効果 */}
HEALTH干し芋の健康効果
{HEALTH_POINTS.map((h) => (

{h.title}

{h.body}

))}
※ 効果には個人差があります。本ページは一般的な栄養情報であり、特定の疾病の予防・治療を保証するものではありません。
{/* おいしい食べ方 */}
HOW TO EATおいしい食べ方
{EATING_TIPS.map((e, i) => (
{i + 1}
{e.t}
{e.body}
))}
{/* 保存方法 */}
STORAGE保存方法
{STORAGE_TIPS.map((s) => (
{s.t}
{s.body}
))}
ヒント:表面に吹く白い粉は、芋の糖分が結晶化したもので甘さの証。カビではありませんので安心してお召し上がりください。
{/* 運営者情報・お問い合わせ */}
ABOUTサイトについて

運営者情報

運営者
干し芋ナビ
サイト名
干し芋ナビ
開設
2026年
内容
国内の干し芋を品種・形状・メーカーで比較し、実食レビューとあわせて紹介する情報サイトです。

当サイトはアフィリエイトプログラム(楽天市場・Amazonアソシエイト等)を利用しています。リンクから購入された場合、当サイトが報酬を得ることがあります。

お問い合わせ

掲載のご依頼、内容の誤りのご指摘、その他ご質問は、下記よりお気軽にご連絡ください。

メール imohoshi25@gmail.com
); } Object.assign(window, { FilterPanel, TopPage });